Tag: generics

参数化通用接口 – 创建一个Dictionary <Type,Interface >?

对不起,标题令人困惑,我不知道我说的是对的,不知道这个叫做什么……如果你想要的话,请在阅读问题后随意编辑。 当我注意到有很多地方可以使用策略模式时,我正在重构我的旧代码。 我有一个库存系统和物品 – 有多种方法可以添加物品 – 正常方式,有力的方式等等。您还可以用多种方式再次交换物品 – 所以我认为那些是好地方使用那种模式。 这是我有的,用于添加项目: public interface IAddingStrategy where T : AddArgs { bool Add(T args); } public class NormalAdd : IAddingStrategy { public bool Add(NormalAddArgs args) { // normal adding logic… } } public class ForceAdd : IAddingStrategy { public bool Add(ForceAddArgs args) { // force adding logic… } […]

C#:当有多个类型参数时,为什么generics类型推断不起作用?

这是两个样本: 这很好用: void Main() { var list = Queryable.ProjectTo(typeof(Projection)); } public static class QueryableExtensions { public static ProjectionList ProjectTo(this IQueryable queryable, Type projectionType) { return new ProjectionList(queryable, projectionType); } } 这会引发以下错误: 使用generics方法’QueryableExtensions.ProjectTo(System.Linq.IQueryable)’需要2个类型参数 void Main() { var list = Queryable.ProjectTo(); } public static class QueryableExtensions { public static ProjectionList ProjectTo(this IQueryable queryable) { return new ProjectionList(queryable); […]

什么时候generics参数永远不会为空

在通用的GetHashCode(T foo)方法中,我检查foo是否为null 。 然而,我偶然发现了一个奇怪的Resharper警告。 在下面的代码中, foo永远不会为null吗? private class FooComparer : IEqualityComparer where T: Foo { public int GetHashCode(T foo) { // resharper warning: “Expression is always false” if (Object.ReferenceEquals(null,foo)) return 0; // … calculate hash } } 但据我所知,以下是完全合法的: Foo foo = null; var fooComparer = new FooComparer(); int hash = fooComparer.GetHashCode(foo);

从其通用父类inheritance的嵌套类

这可能是某种情况,有这种情况,AN使用此代码示例从Ainheritance代码? 这样设置的原因是我需要多个inheritance自Base和Nested : Base ,其中服务器只有base,而客户端有扩展的Nested。 通过这种方式,可以很容易地使用代码,在这些代码中,它们之间和彼此之间会有一些共享代码。 问题是我必须在内部编写相同的代码 A and AN B and BN C and CN 等等 我通过使用接口替换嵌套的抽象类并执行来暂时解决了这个问题 AN : A, INested ,但现在我必须在所有嵌套类中重写Base.Nested代码。 目前,嵌套类很小并且可以管理。 希望这不是一个令人困惑的问题…… public abstract class Base where TType : class { public TType data; internal void CommonCodeForAll() { } public abstract void Update(); public abstract class Nested : Base { public abstract […]

如何将子类分配给非generics类中的generics字段

在C#中,我试图将私有generics变量存储在通过generics方法传入的非generics类中。 generics方法应该将子类转换为基类类型。 以下是此问题的示例: class BaseModel { } class DerivedModel : BaseModel { } class Data where T : BaseModel { } // Class is NOT generic class DataConsumer { // How do I set this to generic? private Data data; public void Set(Data data) where T : BaseModel { // Compile time error: // Cannot […]

使用Assembly.LoadFrom加载generics类型

请参考Jon Skeet的答案: 将实例化System.Type作为generics类的类型参数传递 我需要根据generics类型的名称加载一个Generic类型,以及作为generics的type参数的类型的名称。 所以从Jon的例子中我会得到: string genName = “MyNamespace.Generic”; string itemName = “System.String”; 我有以下代码将加载基于类型名称和完全对齐的程序集名称/路径的类型。 它适用于“简单类型” public Type GetTypeOf(string assemblyPath, string className) { var asmbly = System.Reflection.Assembly.LoadFrom(assemblyPath); //open assembly return asmbly.GetType(className, true, true); //throws error, not case sensitive } 我希望使用如下: //Get the types var genTyp = GetTypeOf(genPath,genName); var itemTyp = GetTypeOf(itemPath,itemName); //Put them together: var typ […]

C#通用列表,默认大小或供应一

我想知道是否存在差异(在性能,内存节省方面)来定义具有默认大小的列表或指定一个列表。 List m_objects = new List(); or List m_objects = new List(100); 如果添加更多项目,两者都会增加一倍,对吧? 谢谢,

解析是获取成员类型的唯一方法吗?

下面的reflection代码返回: System.Collections.Generic.IList`1[TestReflection.Car] Cars 如何通过reflection获得Cars根类型? 不是IList – 我怎么能Car ? using System; using System.Reflection; using System.Collections.Generic; namespace TestReflection { class MainClass { public static void Main(string[] args) { Type t = typeof(Dealer); MemberInfo[] mi = t.GetMember(“Cars”); Console.WriteLine(“{0}”, mi[0].ToString()); Console.ReadLine(); } } class Dealer { public IList Cars { get; set; } } class Car { public string […]

通用ServerControl语法?

有没有办法让我有一个服务器控件 MyControl 这样我就可以在aspx页面中注册并使用它 <mc:MyControl ID=”instanceOfMyControl” runat=”server” 显然设计师并不喜欢这样,除了创建一个带有类型参数的非通用包装外,还有什么好的方法吗?

用C#解释外行风格的generics?

重复C#中的“”语法是什么 其实我想知道“我为什么以及何时应该使用generics?”。 有什么需要呢?