首页 / C# / c# – 构造函数或显式强制转换
c# – 构造函数或显式强制转换
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 构造函数或显式强制转换,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2257字,纯文字阅读大概需要4分钟。
内容图文
![c# – 构造函数或显式强制转换](/upload/InfoBanner/zyjiaocheng/807/3deb9733bcda4357856c4fa8bb8e656a.jpg)
在使用Linq to Sql时,我创建了一个单独的类来将数据传送到网页.为了简化创建这些渡轮对象,我要么使用专门的构造函数,要么使用显式转换运算符.我有两个问题.
从可读性的角度来看,哪种方法更好?
第二,虽然生成的clr代码对我来说似乎是相同的,但是在某些情况下编译器会处理一个不同于另一个的情况(在lambda等中).
示例代码(DatabaseFoo使用专门的构造函数,BusinessFoo使用显式运算符):
public class DatabaseFoo
{
private static int idCounter; // just to help with generating data
public int Id { get; set; }
public string Name { get; set; }
public DatabaseFoo()
{
Id = idCounter++;
Name = string.Format("Test{0}", Id);
}
public DatabaseFoo(BusinessFoo foo)
{
this.Id = foo.Id;
this.Name = foo.Name;
}
}
public class BusinessFoo
{
public int Id { get; set; }
public string Name { get; set; }
public static explicit operator BusinessFoo(DatabaseFoo foo)
{
return FromDatabaseFoo(foo);
}
public static BusinessFoo FromDatabaseFoo(DatabaseFoo foo)
{
return new BusinessFoo {Id = foo.Id, Name = foo.Name};
}
}
public class Program
{
static void Main(string[] args)
{
Console.WriteLine("Creating the initial list of DatabaseFoo");
IEnumerable<DatabaseFoo> dafoos = new List<DatabaseFoo>() { new DatabaseFoo(), new DatabaseFoo(), new DatabaseFoo(), new DatabaseFoo(), new DatabaseFoo(), new DatabaseFoo()};
foreach(DatabaseFoo dafoo in dafoos)
Console.WriteLine(string.Format("{0}\t{1}", dafoo.Id, dafoo.Name));
Console.WriteLine("Casting the list of DatabaseFoo to a list of BusinessFoo");
IEnumerable<BusinessFoo> bufoos = from x in dafoos
select (BusinessFoo) x;
foreach (BusinessFoo bufoo in bufoos)
Console.WriteLine(string.Format("{0}\t{1}", bufoo.Id, bufoo.Name));
Console.WriteLine("Creating a new list of DatabaseFoo by calling the constructor taking BusinessFoo");
IEnumerable<DatabaseFoo> fufoos = from x in bufoos
select new DatabaseFoo(x);
foreach(DatabaseFoo fufoo in fufoos)
Console.WriteLine(string.Format("{0}\t{1}", fufoo.Id, fufoo.Name));
}
}
解决方法:
在大多数情况下,我并不是转换的忠实粉丝 – 无论是明确的还是隐含的.相同的语法:(TypeName)表达式用于各种不同类型的转换,并且知道编译器应用哪种类型会有点混乱.
像FromDatabaseFoo这样的静态工厂方法很好 – 您可能还希望在DatabaseFoo上拥有ToBusinessFoo的实例方法.在我看来,这两者都比用户定义的转换更清晰.
(这并不是说自定义转换总是一个坏主意,请注意.一般来说,我只是对它们保持警惕.)
内容总结
以上是互联网集市为您收集整理的c# – 构造函数或显式强制转换全部内容,希望文章能够帮你解决c# – 构造函数或显式强制转换所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。