1

私はサブクラスのリストで満たされたクラスを持っています:

public class ClassOfKb
{
    public List<Data> KbDatas {get;set;}
    public List<Product> KbProducts {get;set}
}

public class Data
{
    public Guid ID {get;set;}
    public byte[] data {get;set;}
    public string Name {get;set;}
}
public class Product
{
    public Guid ID {get;set;}
    public string Name {get;set;}
    public byte[] Image {get;set;}
}

私はオブジェクトを作成します:

ClassOfKb kb = new ClassOfKb

サブオブジェクト kb.KbDatas から文字列 "Datas" を抽出したいのですが、試してみました:

string name = kb.KbDatas.GetType().BaseType.Name.Substring(2);

としても:

string name = kb.KbDatas.GetType().Name.Substring(2);

しかし、私が必要なものを何も与えてくれませんでした。これを行う方法はありますか?

編集: 私の質問を指定するには、最初の 2 文字を除いて、必要な文字列はリストの名前です! KbDatas => データ

EDIT2: 私は間違いを犯しました。リスト名とクラス名が異なり、リスト名が必要です

4

8 に答える 8

3

Type.GetGenericArgumentsこれを解決するために使用できます

       ClassOfKb kb=new ClassOfKb();
      kb.KbData = new List<Data>();
      string nameOfData = Type.GetType(kb.KbData.ToString()).GetGenericArguments().Single().Name;

OUTPUT : nameOfData = データ

      kb.KbProduct = new List<Product>();
      string nameOfProduct = Type.GetType(kb.KbProduct.ToString()).GetGenericArguments().Single().Name;

OUTPUT : nameOfProduct = 製品

于 2013-10-09T09:45:27.843 に答える
0

プロパティ名が必要な場合は、式を使用できます。以下のコードは、抽出名 prom プロパティの関数を定義します。

public string GetPropertyName<T>(Expression<Func<T>> property)
{
    return ((MemberExpression)property.Body).Member.Name;
}

これは、プロパティをプロパティ名文字列に変換します。

GetPropertyName(()=>k.KbDatas).Substring(2)
于 2013-10-09T10:55:26.233 に答える
0

プロパティの名前を取得しようとしている場合。これにはいくつかの方法があります。

プロパティ自体からジェネリック引数の名前を取得します - プロパティの名前がわかっている場合。

ClassOfKb kb = new ClassOfKb()
   { KbData = new List<Data>(), KbProduct = new List<Product>() };
Console.WriteLine(kb.KbData.GetType().GetGenericArguments()[0].Name);

プロパティのデータ型がわかっている場合は、リフレクションからプロパティの名前を取得します。

System.Reflection.PropertyInfo pi = kb.GetType()
           .GetProperties()
           .FirstOrDefault(p=>p.PropertyType == typeof(List<Data>));
Console.WriteLine(pi.Name.Substring(2)); // ignoring the kb prefix
于 2013-10-09T09:31:54.477 に答える
0

ええと、ListofDataがあるので、一連のNames があります。

IEnumerable<string> names = kb.KbData.Select(d => d.Name);

多分あなたは最初のものだけが欲しいですか?

string firstName = kb.KbData.First(d => d.Name);
于 2013-10-09T09:24:10.557 に答える
0

これはコレクションであるDataため、それぞれに名前が付いた複数のオブジェクトが含まれている可能性があります。String.Joinそれらを区切り記号で連結するために使用できます。

string names = string.Join(",", kb.KbData.Select(d => d.Name));

オブジェクトが 1 つしかない場合は、最後にコンマを付けません。オブジェクトがない場合は、空の文字列が返されます。

于 2013-10-09T09:22:34.760 に答える
0

これを試してみてください

string name = kb.KbData[0].Name.Substring(2);
于 2013-10-09T09:25:17.317 に答える
0

あなたが書いたものの音から、List インスタンス KbData の型の名前を取得しようとしていますか?

もしそうなら、これはあなたが探しているものかもしれないと思います: https://stackoverflow.com/a/1043778/775479

于 2013-10-09T09:29:33.787 に答える