Tag: generics

使用Silverlight的generics问题

我正在使用Silverlight 5(VS 2010)创建一个C#Web应用程序。 我最初创建了一个工作正常的控制台应用程序,现在我正在调整它到一个Web应用程序。 即使在Web应用程序中,它也适用于特别设置的数据类型(例如,对于int而不是它工作正常)但是当我使用generics时它不起作用。 它编译无错误,但它甚至不调试设置为“切换断点”的区域。 最初GUI是这样的: 但是当控件传递到容易出错的部分时,GUI会突然消失 而且我保留断点的地方被这个替换了 (参见最左边的) 因此我无法调试以找到问题 。 我正在尝试做的一些解释:在下面的给定代码中我有一个二进制文件并存储在“fileContents”中,它是数据类型byte[] (我现在没有向您透露读取该文件的方法,你可以认为fileContents包含MainPage类中的二进制文件的内容。 实际上我会将符号(forms为0和1的符号存储在二进制文件中)并找到它的频率(通过计算它在文件中重复的次数,但没有问题所以我没有为它编写方法)。 但是我的代码中的这个processingValue变量将是generics类型( ),我将它存储在”symbol” (也是类型的(从二进制文件读取的这个符号可能是这些short / int /之一)我没有在我的代码中显示的long / UInt32 / UInt64等)。 我有这样的场景: using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; using System.IO; using System.Text; using System.Runtime.InteropServices; using […]

使用嵌套类型参数和递归(C#)

我试图利用嵌套的参数类型,这似乎是非法的。 我宁愿将递归函数保持在下面,以便我不必复制逻辑。 但是我嵌套使用会使CLR非常不高兴(请参阅代码中列出的错误)。 MyMethod中的逻辑不可避免地创建Action和Action两种类型的委托。 有没有办法改变下面的代码来实现我的目标? 关于使用类型参数(即 )的一般限制是什么? 也许类型安全性的丧失是禁止此类代码的原因? ClassA-> ClassB(inherets) public void MyMethod(Action actionDelagate) where Ttype : ClassB { // Recursive Call with Ttype=ClassA if (Only able create Class A delagate) MyMethod(v => doStuff) // Recursive Call with Ttype=ClassB if (Only able create Class B delagate) MyMethod(v => doStuff) // Utilize Delagate if (TypeOf(Ttype) == […]

将通用方法与不同类型/类的列表一起使用

我正在尝试为List构建搜索function。 这很简单,但是我想要一个方法,它可以采用不同类型的列表。 以下面的示例来清除问题: SearchGridViewCategorie和SearchGridViewMedewerker方法都是搜索List的方法,如果它包含搜索词。 public static void SearchGridViewMedewerker(ref List medewerkers, String term) { medewerkers = medewerkers.Where(m => m.gebruikersnaam.ToLower().Contains(term.ToLower()) || m.naam.ToLower().Contains(term.ToLower()) || m.email.ToLower().Contains(term.ToLower()) || m.rol.ToLower().Contains(term.ToLower())).ToList(); } public static void SearchGridViewCategorie(ref List categorieen, String term) { categorieen = categorieen.Where(c => c.omschrijving.ToLower().Contains(term.ToLower())).ToList(); } 我试图使这个搜索方法通用,以便我可以将不同类型的列表传递给相同的方法。 我尝试过以下方法: public static List SearchGridView(List list, String term) { IList properties = list.GetType().GetProperties().ToList(); List […]

如何传递lambda Expression for Generic方法的参数以检查MVC EF 4.0中的重复项

我的应用程序中有超过10个设置屏幕。 在每个中我都要检查重复数据。 例如,这是一个示例代码。 private void CheckDuplication(AIRLINE airline) { var AIRLINE = context.AIRLINEs.Where(f => f.ABBREVATION == airline.ABBREVATION).FirstOrDefault(); if (AIRLINE == null) { context.AIRLINEs.Add(airline); } else { ModelState.AddModelError(“ABBREVATION”, “Abbreviation already exists.”); } } 对于每个设置,在整个项目中使用几乎相同的代码。 我想让这个方法通用,这样我就可以在需要检查Duplicates的地方调用它。 为此,我必须将参数传递给将设置“Lambda Expression”的generics函数。 我已经创建了一个静态类来从我的应用程序中的任何位置访问它。 问题是如何将参数传递给这样的类(包含generics方法),该类将为不同的表和列设置lambda表达式并显示通用错误消息。在此先感谢。

我该如何实现IEnumerator ?

此代码未编译,并且抛出以下错误: 类型’TestesInterfaces.MyCollection’已包含’Current’的定义 但是当我删除模棱两可的方法时,它会不断给出其他错误。 有人可以帮忙吗? public class MyCollection : IEnumerator { private T[] vector = new T[1000]; private int actualIndex; public void Add(T elemento) { this.vector[vector.Length] = elemento; } public bool MoveNext() { actualIndex++; return (vector.Length > actualIndex); } public void Reset() { actualIndex = -1; } void IDisposable.Dispose() { } public Object Current { get […]

编译器无法转换受约束的generics类型

我有一个通用类型为“G”的类 在我的class级模型中我有 public class DetailElement : ElementDefinition 假设我有这样的方法 public void DoSomething(G generic) where G : ElementDefinition { if (generic is DetailElement) { ((DetailElement)generic).DescEN = “Hello people”; //line 1 ////// ElementDefinition element = generic; ((DetailElement)element).DescEN = “Hello again”; //line 3 ////// (generic as DetailElement).DescEN = “Howdy”; //line 5 } else { //do other stuff } } […]

反思的替代品

我对Generics和Reflection的经验非常少。 我从以下示例中假设的是,它需要花费太多时间来执行。 有没有办法让我在不使用reflection的情况下完成以下操作。 SCENARIO我正在研究一种通用的方法。 它需要传递给它的类的实例,并从所有属性中生成SqlParameters。 以下是名为“Store”的generics方法的代码,以及另一种将c#type转换为DbType的SqlDbType的方法。 List parameters = new List(); public T Store(T t) { Type type = t.GetType(); PropertyInfo[] props = (t.GetType()).GetProperties(); foreach (PropertyInfo p in props) { SqlParameter param = new SqlParameter(); Type propType = p.PropertyType; if (propType.BaseType.Name.Equals(“ValueType”) || propType.BaseType.Name.Equals(“Array”)) { param.SqlDbType = GetDBType(propType); //eg public bool enabled{get;set;} OR public byte[] img{get;set;} […]

动态创建IList类型的新实例

我的申请正在处理IList。 不同用户定义类型的IList。 我想我可以使用reflection来查看IList包含的对象类型,然后创建该类型的新实例,然后将其添加到IList本身? 所以在任何时候我都可能正在处理 IList l; 我想创建一个新的Customer实例 Customer c = new Customer(0, “None”) 然后将其添加到列表中 l.Add(c); 显然,在运行时动态执行此操作是问题的关键。 希望有人能给我一些指示。 谢谢brendan

如何访问作为参数传递给C#中的通用函数的对象的方法

我有一个generics方法,它有一些generics类型的参数。 我想要做的是,能够访问我的函数内的这个generics类型参数的方法。 public void dispatchEvent(T handler, EventArgs evt) { T temp = handler; // make a copy to be more thread-safe if (temp != null) { temp.Invoke(this, evt); } } 我希望能够在temp上调用Invoke方法,类型为T.有没有办法做到这一点? 谢谢。

C#如何使用“Type”类型的对象初始化Generic类

我最近有这个问题。 doSomething(typeof(int)); doSomething(typeof(MyClassA)); doSomething(typeof(MyClassB)); public void doSomething(Type _type) { var myGenObj = new MyGenericClass(); // Error. Really I’d want MyGenericClass, MyGenericClass, etc depending on what’s passed in. myGenObj.doSomeGenStuff(); // more stuff… } 我认为这可以通过某种方式进行反思。可能有一种更简单的方法。 关于Type的工作方式和类下的Classes,我有点困惑。 无论如何,谢谢你的帮助。 谢谢。