Tag: generics

“哪里T:somevalue”是什么意思?

where T : somevalue意味着什么? 我刚看到一些代码说where T : Attribute 。 我认为这与generics有关,但我不确定这意味着什么或它在做什么。 有人知道吗?

什么是隐含的generics类型参数

所以,我遇到了Servy( https://stackoverflow.com/a/15098242/496680 )的答案,他的一些代码执行了此操作: public static int BinarySearch(…) 对于扩展方法,但他称之为: arr.BinarySearch(…) 我四处询问,有人提到它是一个隐含的generics类型参数。 我用谷歌搜索了他们,但没有找到关于他们的信息。 我理解generics如何工作,但我无法理解如何/何时使用这些。 为什么servy在他的扩展方法中使用它们? 我可以搜索这些更正式的名称吗?

什么是Action ?

什么是Action ,它如何使用?

工厂模式与开放的generics

在ASP.NET Core中,您可以使用Microsoft的dependency injection框架执行的操作之一是绑定“open generics” (未绑定到具体类型的generics类型),如下所示: public void ConfigureServices(IServiceCollection services) { services.AddSingleton(typeof(IRepository), typeof(Repository)) } 您还可以使用工厂模式来水合依赖项 。 这是一个人为的例子: public interface IFactory { T Provide(); } public void ConfigureServices(IServiceCollection services) { services.AddTransient(typeof(IFactory), typeof(Factory)); services.AddSingleton( typeof(IRepository), p => p.GetRequiredService<IFactory<IRepository>().Provide() ); } 但是,我还没弄清楚如何将这两个概念结合起来。 看起来它会从这样的东西开始,但我需要用于水合IRepository实例的具体类型。 public void ConfigureServices(IServiceCollection services) { services.AddTransient(typeof(IFactory), typeof(Factory)); services.AddSingleton( typeof(IRepository), provider => { // Say the IServiceProvider […]

C#/ .Netgenerics如何知道它们的参数类型?

在C#中,generics函数或类知道其generics参数的类型。 这意味着动态类型信息,如是或可用(与Java不同)。 我很好奇,编译器如何将这种类型信息提供给generics方法? 对于类我可以想象实例可以简单地有一个指向类型的指针,但对于generics函数我不确定,也许只是一个隐藏的参数? 如果generics被保存到IL级别,我相信它们是,那么我想知道在这个级别如何完成。

C#:IEnumerable,GetEnumerator,一个简单,简单的例子,请!

试图创建一个实现get枚举器的uebersimple类,但由于缺少简单/无function的例子而疯狂失败。 我想要做的就是在数据结构周围创建一个包装器(在这种情况下是一个列表,但我以后可能需要一个字典)并添加一些函数。 public class Album { public readonly string Artist; public readonly string Title; public Album(string artist, string title) { Artist = artist; Title = title; } } public class AlbumList { private List Albums = new List; public Count { get { return Albums.Count; } } ….. //Somehow GetEnumerator here to return Album } […]

在XmlSerializer中使用generics

在C#中使用XML序列化时,我使用如下代码: public MyObject LoadData() { XmlSerializer xmlSerializer = new XmlSerializer(typeof(MyObject)); using (TextReader reader = new StreamReader(settingsFileName)) { return (MyObject)xmlSerializer.Deserialize(reader); } } (以及类似的反序列化代码)。 它需要铸造而且不是很好。 有没有办法,直接在.NET Framework中使用generics与序列化? 也就是说写下这样的东西: public MyObject LoadData() { // Generics here. XmlSerializer xmlSerializer = new XmlSerializer(); using (TextReader reader = new StreamReader(settingsFileName)) { // No casts nevermore. return xmlSerializer.Deserialize(reader); } }

我可以从Func 获取特定的元数据吗?

请考虑以下代码: string propertyName; var dateList = new List() { DateTime.Now }; propertyName = dateList.GetPropertyName(dateTimeObject => dateTimeObject.Hour); // I want the propertyName variable to now contain the string “Hour” 这是扩展方法: public static string GetPropertyName(this IList list, Func func) { //TODO: would like to dynamically determine which // property is being used in the func function/lambda } […]

深入选择多个级别

我可以使用SelectMany在集合中展平子集合的结果: // a list of Foos, a Foo contains a List of Bars var source = new List() { … }; var q = source.SelectMany(foo => foo.Bar) .Select(bar => bar.barId) .ToList(); 这给了我Foo列表中所有Bar ID的列表。 当我尝试深入三级时,返回错误的结果。 var q = source.SelectMany(foo => foo.Bar) .SelectMany(bar => bar.Widget) .Select(widget => widget.WidgetId) .ToList(); 我应该如何使用SelectMany获取Foos列表中所有条形图中所有小部件的列表? 编辑我错过了上面的句子,但代码反映了目标。 我正在寻找所有Widget ID的列表,而不是小部件。 “不正确”的结果并非返回所有窗口小部件ID。

在C#中使用List (generics)

这是一个非常基本的问题,但我以前从未研究过仿制药,我发现自己需要使用它。 不幸的是我现在没时间通过任何教程,到目前为止我找到的相关问题的答案并不是人们可以称之为基本的,所以我们去: 假设我有以下内容: List list1 = getListType1(); List list2 = getListType2(); if (someCondition) MyMethod(list1); else MyMethod(list2); 而且当然 void MyMethod(List list){ //Do stuff } 好吧,我认为这很简单,但显然不是。 VS警告我 无法从用法推断出方法MyMethod(System.Collections.Generic.List)的类型参数 无论如何,如果我编译它,我得到一个 找不到类型或命名空间名称“T” 错误。 在我发现的许多答案中,我读到我必须声明T是什么,这是有道理的,但我无法理解如何在如此简单的场景中这样做。 当然,那些答案在我的脑海里创造了更多的问题,但是现在我只想解释一下我做错了什么(除了不研究generics)以及如何使它正确。