Tag: generics

LINQ使用接口对抗两个不同的数据上下文

这是我在这里提出的问题的延续。 简介:我有两个不同的数据库,只有很少的更改(一个表中缺少一个表和外键),我希望我的导入实用程序使用Linq-To-Sql能够使用数据填充这两个数据库,而不会重复逻辑。 我的第一种方法是在单个变量中使用dynamic存储两个不同的数据库上下文,但这种方法不起作用,我建议使用接口来实现此目的。 现在我碰到了以下问题: 我正确地从我的db上下文类中提取了接口: public interface IDataContext { System.Data.Linq.Table FieldCollections { get; } System.Data.Linq.Table Fields { get; } } …但是为了能够通过两个不同的数据库上下文类实现接口,我不得不用实际的LINQ类( FieldCollection , Field )替换接口。 现在我在我的类实现中返回Table或Table遇到问题。 db上下文类的自动生成代码如下: public System.Data.Linq.Table FieldCollections { get { return this.GetTable(); } } 所以,为了在这里实现IDataContext ,我需要将返回值更改为Table 。 如何在我的属性getter Table Table为Table 而不从数据库中检索完整的表 ?

如何覆盖ToString()并实现generics?

我有代码,我想做出以下更改: 如何覆盖ToString()? 它说:静态成员… ToString(System.Collections.Generic.List)’不能标记为覆盖,虚拟或抽象。 我如何使它通用? public static override string ToString(this List list) { string output = “”; list.ForEach(item => output += item.ToString() + “,” ); return output; } 谢谢!

带有generics参数的普通C#类无法编译,没有明显的原因

我想要一个generics函数,它可以使用具有Top , Bottom , Right和Rect只读属性的类型 – 我在第三方库中有很多这样的类。 我写了这个: internal class MyTemplate { internal static void Work( WhatType what ) { int left = what.Left; } }; 我希望它能工作 – C ++中的等效代码可以正常工作。 但是C#对象: 错误CS1061:’WhatType’不包含’Left’的定义,并且没有扩展方法’Left’接受类型’WhatType’的第一个参数可以找到(你是否缺少using指令或汇编引用?) 我不明白 – 为什么它会在我调用它之前尝试实例化模板? 当然,类型WhatType尚不知道,因此找不到任何属性。 我做错了什么,如何解决这个问题?

为什么我们不能在派生类中使用带参数的构造函数

为什么这不可能? 在使用constructor-parameter实例化“DerivedClass”时,我得到以下编译器错误: ‘GenericParameterizedConstructor.DerivedClass’不包含带有1个参数的构造函数 但调用一个非常相似的方法是有效的 为什么? class Program { static void Main(string[] args) { // This one produces a compile error // DerivedClass cls = new DerivedClass(“Some value”); // This one works; DerivedClass cls2 = new DerivedClass(); cls2.SomeMethod(“Some value”); } } public class BaseClass { internal T Value; public BaseClass() { } public BaseClass(T value) { […]

使用动态generics类型参数创建generics类的实例

我需要像这样创建一个generics类的实例: Type T = Type.GetType(className).GetMethod(functionName).ReturnType; var comparer = new MyComparer(); // ERROR: “The type or namespace name ‘T’ could not be found” 我发现这个答案只有通过反思才能实现。 但是使用reflection我得到了我需要转换为我的generics类型的对象。 我试过这样的 Type myGeneric = typeof(MyComparer); Type constructedClass = myGeneric.MakeGenericType(); object created = Activator.CreateInstance(constructedClass); var comparer = (T)Convert.ChangeType(created, T);// ERROR: “The type or namespace name ‘T’ could not be found” 但得到同样的错误。 怎么解决? […]

C#Generic class vs Generic方法

使类通用的优点是反对只是使方法通用? 在哪种情况下你想使用generics类?

过滤模板列表,属性名称为字符串

嗨,我必须在generics类上应用filter。 样本类如下 public class Sample { List sourceList = new List(); public void applyFilter(string propertyName , EnumOperator operator , object value) { } } 在这里,我想使用linq或动态linq实现filter,但是没有得到任何积极的方向来实现这个function。 请给我一些积极的方向,以便我可以实现此function。 谢谢。

在C#中reflection地实现generics类型推断

我需要为脚本语言实现做一些通用类型推断,我想知道我是否缺少一些简单的方法。 暂时让我问一下类型结构并忽略边界。 为了说明,这是一个深层嵌套的例子: T foo( List<List<List>> ) {…} 现在我想测试是否可以传递类型的参数栏: List<List<List>> 到该方法,然后使用带有已发现的param类型的MakeGenericMethod()来实现并调用它。 据我所知,即使我设法构造一个等同于foo参数的开放generics类型(即List<List<List>> ),它也不会使用isAssignable()进行测试。 我不确定是否有一些技巧来检查开放generics类型的可分配性,或者它是否根本不受支持。 我想如果必须,我可以直接这样做。 在具体化 – 看起来我将不得不递归爬行类型以找到与类型参数的位置匹配的参数类型然后进行替换…我一直希望我可能能够以某种方式更直接地从参数类型构造可调用方法,但我没有看到如何做到这一点。 任何已经经历过这种疯狂的人的建议都会受到赞赏:) 谢谢,Pat Niemeyer

为什么我不能在generics中使用Type.GetType()?

我试图通过使用某些类型的字符串表示来摆脱一些引用。 但是编译器不允许我按照通用方法的方式进行操作。 我试过这个: IContainer container = components as IContainer; Type type = Type.GetType(“MyNamespace.MyType”); foreach (var component in container.Components.OfType()) { … } 还有这个: foreach (var component in container.Components.OfType()) { … } 对于第一个循环,我得到:“运算符'<'不能应用于'方法组'和'System.Type'类型的操作数,而对于第二个循环,变量超出范围由于某种原因。为什么会发生这种情况有办法解决吗?先谢谢。

模糊的通用限制T:class vs T:struct

此代码生成编译器错误,该成员已使用相同的参数类型定义。 private T GetProperty(Func GetFunc) where T:class { try { return GetFunc(Properties.Settings.Default); } catch (Exception exception) { SettingReadException(this,exception); return null; } } private TNullable? GetProperty(Func GetFunc) where TNullable : struct { try { return GetFunc(Properties.Settings.Default); } catch (Exception ex) { SettingReadException(this, ex); return new Nullable(); } } 有干净的工作吗?