簡體   English   中英

如何獲得所需的類型?

[英]How can I get the type I want?

我的項目中a lot這樣的類(非常老而穩定的代碼,我無法對其進行太多更改,也許稍作更改就可以了

public class MyEntity
{
   public long ID { get; set; }
   public string Name { get; set; }
   public decimal Salary { get; set; }
   public static GetMyEntity ( long ID )
   {
      MyEntity e = new MyEntity();
      // load data from DB and bind to this instance
      return e;
   } 
}

由於某些原因,現在我需要這樣做:

Type t = Type.GetType("XXX"); // XXX is one of the above classes' name
MethodInfo staticM= t.GetMethods(BindingFlags.Public | BindingFlags.Static).FirstOrDefault();// I'm sure I can get the correct one
var o = staticM.Invoke(...); //returns a object, but I want the type above!

如果我在一開始通過“ MyEntity”,我希望我可以成為MyEntity! 請注意 ,我只知道“班級名稱”。 MyEntity e = staticM.Invoke(...) as MyEntity; 不能在這里使用。

編輯

我正在嘗試用表達式來解決它。

ParameterExpression[] parameterExps = (from p in staticM.GetParameters()
                   select Expression.Parameter(p.ParameterType, p.Name)).ToArray();
MethodCallExpression methodCallExp = Expression.Call(staticM, parameterExps);
BlockExpression blockExpression = Expression.Block(methodCallExp);
LambdaExpression lambdaExp = Expression.Lambda(blockExpression, parameterExps);
var d = lambdaExp.Compile() as Func<XX1,XX2>;

在示例MyEntity中,XX1將是long,XX2將是MyEntity,但是如何編寫它以適合其他情況?

由於沒有解決方案,因此我將繼續使用反射操作返回對象...

一旦對象退還,您將如何處理?

如果校准代碼知道它是什么,則可以將其轉換為該代碼。

確實,您在這里渴望接口 ,因為可以使用已知接口來返回,然后可以調用適當的方法。

有沒有辦法讓編譯時間(從用戶輸入例如)檢查,如果是動態生成你的字符串“XXX”,因此沒有辦法有o是什么,但object

但是,如果這是一個硬編碼的字符串,或者如果您另外知道 compile-type的類型,則可以進行強制轉換:

var o = (XXX)staticM.Invoke(...);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM