Tag: generics

你能在控制器中使用generics方法吗?

是否可以在控制器中使用通用方法? 我在谈论这样的事情: [HttpPost] public void DoSomething([FromBody] SomeGenericClass someGenericObject) { SomePrivateMethod(someGenericObject); } 我实际上已经尝试了上面的内容(虽然所有内容都有不同的名称)并且在请求正文中使用someGenericObject的实例发布到Api//DoSomething ,但它不起作用(即它没有到达控制器)。 我猜测Web API路由无法解析generics方法,因为它们可能导致下面不同类型的不同方法。 但这就是我的想法。 那么,是否可以在控制器中使用通用方法? 如果有,怎么样? 如果没有,为什么?

您认为通用属性在.NET中会有用吗?

我不是在讨论声明具有generics参数类型的属性或字段的generics类。 我在谈论可以应用于generics和非generics类的generics属性。 我不是在说这个: public class Base { public T BaseProperty { get; set; } } 我在说这个: public class Base { public T BaseProperty { get { // Insert magic } set { // Insert magic } } } 或这个: public class Base { public T BaseProperty { get { // Insert magic } set { […]

我可以拥有通用的属性吗?

我有一个DICOM字典,其中包含一组所有从DataElement派生的对象。 字典有一个int作为键,DataElement作为属性。 我的DICOM字典包含一个this []属性,我可以在其中访问DataElement,如下所示: public class DicomDictionary { Dictionary myElements = new Dictionary(); . . public DataElement this[int DataElementTag] { get { return myElements[int]; } } } 现在的一个问题是我有不同的DataElement类型,它们都是从DataElement派生的,比如DataElementSQ,DataElementOB等。 我现在要做的是使用C#编写文章更容易: public T this[int DataElementTag] where T : DataElement { get { return myElements[int]; } } 但这实际上是不可能的。 有没有我错过的东西? 当然我可以用Getter方法做到这一点,但是用这种方式会更好。

在不知道类型的情况下返回通用

我有一种情况,我有一个类,在其generics类型参数中接受某个对象类型的实例。 布局是这样的: public abstract BaseClass { … } public DiamondClass : BaseClass { … } public SilverClass : BaseClass { … } public Handler where T : BaseClass { … } 我希望能够创建一个方法来返回Handler或Handler的实例,而无需在输入时定义类型。 我试过这些方面的东西: public Handler GetHandler(HandlerType type) { switch(type) { case HandlerType.Diamond: return new Handler(); case HandlerType.Silver: return new Handler(); default: throw new InvalidOperationException(“…”); } […]

C#generics类操作符不起作用

我有generics问题。 当我尝试在通用中使用较少的运算符时,他们的调用不会发生。 但它适用于Equals方法。 这是一个测试类: public class Test { public int i; static public Boolean operator ==(Test obj1, Test obj2) { Console.WriteLine(“operator ==”); return obj1.i == obj2.i; } static public Boolean operator !=(Test obj1, Test obj2) { Console.WriteLine(“operator !=”); return obj1.i != obj2.i; } public override bool Equals(object obj) { Console.WriteLine(“operator equals”); return this == (Test)obj; […]

条件语句,generics委托不必要的演员

设置Action值时,我在条件语句中遇到了这个非常奇怪的问题。 这不是我不知道如何解决这个问题,因为使用普通的if很容易解决。 这是我的问题: public class Test { public bool Foo { get; set; } public Action Action { get; set; } public void A() { Action = Foo ? B : C;//Gives compiler error } public void B(bool value) { } public void C(bool value) { } } 这给了我一条消息的编译器错误 “方法组”和“方法组”之间没有隐式转换。 这很奇怪,因为我无法弄清楚为什么这是非法的。 顺便说一句,下面的语法将使这个有效(从编译器的角度来看): public void A() […]

无法将List 传递给期望List 的方法,其中Foo:IFoo

我有一个实现IFoo接口的类Foo 。 我有一个方法将List作为参数。 但是,它无法从List转换为List – 这让我感到惊讶,因为Foo实现了IFoo接口。 我怎样才能解决这个问题,为什么会出现这种情况? (总是很好地从错误中吸取教训)

问题x:TypeArguments和XAML中的genericsList类

我为松散的XAML文件创建了以下标记。 HelloWorld 但是当我在IE中运行松散的XAML时,我收到此错误: XML命名空间’clr-namespace:System.Collections.Generic; assembly = mscorlib’中不存在标记’List’。 线’7’位置2’。 正如您所知,XAML中的generics是XAML 2009中的一个特性,并且只能在松散的XAML文件中工作。 但上面的代码不起作用。 任何线索为什么会发生此错误以及如何纠正问题? 提前致谢。

在C#中创建和使用自定义List

我正在尝试使用自定义列表,我已经添加了一些额外的工具。 我想将此列表应用于我创建的一长串自定义类。 所有类都有一个ID号,List中的一些工具使用ID。 这是我尝试使用的代码的一部分。 我希望这能帮助你理解我的问题。 namespace Simple_Point_of _Sales_System { public class MyList : List { internal int SetID() { return this.Max(n => n.ID) + 1; } internal T Find(int ID) { return this.Find(n => n.ID == ID); } internal T Add(T n) { Read(); Add(n); Write(); return n; } internal void Remove(int ID) { Read(); […]

仅当S和T不同时,才从λ表达式的输出推断出Func 的T?

当S和T不同时,这有效: public static void Fun(Func func) { } Fun((string s) => true); //compiles, T is inferred from return type. 但, public static void Fun(Func func) { } Fun(t => true); //can’t infer type. 在第一个例子中,由于T是从lambda表达式的返回类型推断的,所以第二个例子中的T也不能被推断出来吗? 我想它是这样做的,但是为什么第一个T未知,当Func第二个T已知时,毕竟T == T对吗? 或者在Func的情况下是否有推断类型的订单?