Tag: generics

C#:没有从Class 到Class 的转换

以下代码片段无法编译。 出现以下错误: 无法将类型’Container ‘隐式转换为’Container ‘ class BaseClass {} class ChildClass : BaseClass {} class Container where T : BaseClass {} class Program { static void Main() { // why doesn’t this work? Container obj = new Container(); } } 这是设计的吗? 如果是,那是什么原因?

定义实现+运算符的通用

可能重复: .NETgenerics中重载运算符约束的解决方案 我有一个问题,我正在努力,目前它正在为int工作,但我希望它适用于所有可以使用+运算符添加的类。 有没有办法在通用中定义它? 例如, public List Foo() where T : ISummable 有没有办法做到这一点? 编辑: 传入委托进行求和而不是使用+ =类型为Int的性能最好慢540%。 调查可能的其他解决方案 最终解决方案 谢谢大家的建议。 我最终找到了一个不太慢的解决方案,并在编译时强制执行检查。 当一位同事帮我解决这个问题时,我无法完全信任。 无论如何,这里是: 以函数的forms实现一个包含所有必需操作符的接口 public interface IFoo { //Adds A to B and returns a value of type OutputType OutputType Add(InputType a, InputType b); //Subtracts A from B and returns a value of type OutputType OutputType […]

返回默认值。 (C#)

我正在创建自己的字典,但我无法实现TryGetValue函数。 当找不到密钥时,我没有任何东西要分配给out参数,所以我保持原样。 这会导致以下错误:“必须在控制离开当前方法之前分配out参数’value’” 所以,基本上,我需要一种方法来获取默认值(0,false或nullptr取决于类型)。 我的代码类似于以下内容: class MyEmptyDictionary : IDictionary { bool IDictionary.TryGetValue (K key, out V value) { return false; } …. }

ArrayList有什么问题?

最近我问了一个关于SO的问题,提到了c#ArrayList可能用于解决方案。 有人评论说使用arraylist是不好的。 我想更多关于这一点。 我之前从未听过关于arraylists的陈述。 sombody让我快速了解使用arraylists可能出现的性能问题 C#。 达网络-2-

递归generics类型

是否可以在C#中定义引用自身的generics类型? 例如,我想定义一个Dictionary ,它将其类型保存为TValue(用于层次结构)。 Dictionary<string, Dictionary<string, Dictionary>>

.NET管理层关系

我实际上是在重新创建项目的默认架构。 在这篇文章中,我希望你不仅可以帮助我,还可以思考,讲述和改进现有方法。 这可能是非常有用的挑战。 此默认架构可以与所有人自由共享。 所以这里是描述:基本上MVC是我们的观点。 我们遵循OOP和层编程概念。 我们还将使用SQL Server和EF DB First 。 所以这就是我到目前为止所做的:我在我的解决方案中创建了4个层: 域:JUST域类 DAL:负责访问数据,包含UOW和存储库以及与数据访问相关的validation。 BL:独特负责业务逻辑和DAL的独特老板。 UI:这不是那么重要! (即使它可能是一个控制台应用程序!) 我已经使用通用函数实现BL,如getAll和getById以及crud funcs.these funcs将调用DAL通用函数,这也是准备好的。 现在一个重要的问题是:将DAL函数实现为GENERIC是否正确? 请考虑这种情况: 从UI我们发布模型到动作,在行动中我们称为BL Func( BL.insert (模型))。 BL.Insert函数会调用类似DAL.Add (模型)的东西(注意BL将调用DAL一次并告诉它它想要什么)。 现在DAL.Add func必须将3条记录插入3个不同的表中(模型从UI层传递)。 我认为这不可能通过DAL GENERICfunction来实现。 那么,在注意到关注点分离的情况下,实现图层和关系的正确和标准方法是什么? 在我的行动中我会: [HttpPost] public ActionResult Insert() { Bl.EntityBase.Article.Insert(new Article()); return RedirectToAction(“Index”); } 在BL我会: public void Insert(T obj) { Da.Repository().Insert(obj); } 在我的DAL中,我有: public virtual […]

generics的默认值

如何在VB中创建generics的默认值? 在C#我可以打电话: T variable = default(T); 我怎么在VB中这样做? 如果这只返回null(C#)或没有(vb)那么值类型会发生什么? 有没有办法为自定义类型指定默认值是什么? 例如,如果我希望默认值等同于在我的类上调用无参数构造函数。

.NET EventHandlers – 通用还是不通用?

每次我深入开始一个C#项目时,我最终都会遇到许多事件,而这些事件实际上只需要传递一个项目。 我坚持使用EventHandler / EventArgs练习,但我喜欢做的是: public delegate void EventHandler(object src, EventArgs args); public class EventArgs: EventArgs { private T item; public EventArgs(T item) { this.item = item; } public T Item { get { return item; } } } 后来,我可以拥有我的 public event EventHandler FooChanged; public event EventHandler BarChanged; 但是,似乎.NET的标准是为每种类型的事件创建一个新的委托和EventArgs子类。 我的通用方法有问题吗? 编辑:这篇文章的原因是我刚刚在一个新项目中重新创建了它,并希望确保它没问题。 实际上,我在发布时正在重新创建它。 我发现有一个通用的EventHandler ,所以你不需要创建generics委托,但是你仍然需要通用的EventArgs类,因为TEventArgs: EventArgs 。 […]

Hashtable to Dictionary syncroot。

Hashtables具有syncroot属性,但通用字典不具备。 如果我有代码执行此操作: lock (hashtable.Syncroot) { …. } 如果我删除哈希表并更改为通用词典,我该如何复制?

通用对象的通用列表

假设我有一个表示数据字段的对象,该对象需要以下属性:Name,Type,Value,Length。 这是对象: class Field { public string Name { get; set; } public Type Type { get { return typeof(T); } } public int Length { get; set; } public T Value { get; set; } } 我使用了generics,因为我想强制代码的用户只能分配某种类型的值。 现在的问题是我想创建一个字段列表。 如果我创建List<Field>类的List<Field>那么我们可以将任何Value分配给列表中的给定Field,当我们查询Type时,我们得到’object’。 事情是 – 在那个列表上我可能想要几个字段持有字符串,很少持有整数,日期,甚至自定义对象反过来将有一个字段列表… generics是一个很好的解决方案吗? 如果是,我将如何实施呢? 如果没有,有什么更好的方法? – -编辑 – – 只是为了增加一些背景: 1.我可能想要一个字段列表,每个字段将保存不同的数据类型,如下所示: List<Field> lst = […]