クラスのすべてのプロパティのリストを取得するにはどうすればよいですか?クラスのプロパティのリストを取得するには?
答えて
反射;
obj.GetType().GetProperties();
タイプのため:例えば
typeof(Foo).GetProperties();
:
class Foo {
public int A {get;set;}
public string B {get;set;}
}
...
Foo foo = new Foo {A = 1, B = "abc"};
foreach(var prop in foo.GetType().GetProperties()) {
Console.WriteLine("{0}={1}", prop.Name, prop.GetValue(foo, null));
}
フィードバックに続き...
- のvalを取得するために、例えば、静的プロパティのueは、を最初の引数として
GetValue
- に渡します。非公開のプロパティを調べるには、たとえば
GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)
(すべてのpublic/privateインスタンスのプロパティを返します)を使用します。
としての答えの1をマークしてください、またTypeDescriptor.GetPropertiesによって公開さComponentModel、(...)があります時間)。 –
提案:保護された/私的/静的/継承されたプロパティをカバーするための答えを展開してください。 – Richard
あなたが表示するforeach文は、あなたがクラスのプロパティを取得したいクラス内からでも機能します:) –
リフレクションを使用できます。
Type typeOfMyObject = myObject.GetType();
PropertyInfo[] properties =typeOfMyObject.GetProperties();
あなたがこれを行うにリフレクションを使用することができます。 を(私のライブラリから - これは名前と値を取得します)
public static Dictionary<string, object> DictionaryFromType(object atype)
{
if (atype == null) return new Dictionary<string, object>();
Type t = atype.GetType();
PropertyInfo[] props = t.GetProperties();
Dictionary<string, object> dict = new Dictionary<string, object>();
foreach (PropertyInfo prp in props)
{
object value = prp.GetValue(atype, new object[]{});
dict.Add(prp.Name, value);
}
return dict;
}
この事は、インデックス付きプロパティのために動作しません - そのために(扱いにくいってきている):
public static Dictionary<string, object> DictionaryFromType(object atype,
Dictionary<string, object[]> indexers)
{
/* replace GetValue() call above with: */
object value = prp.GetValue(atype, ((indexers.ContainsKey(prp.Name)?indexers[prp.Name]:new string[]{});
}
また、唯一のパブリックプロパティを取得する:(see MSDN on BindingFlags enumを)
/* replace */
PropertyInfo[] props = t.GetProperties();
/* with */
PropertyInfo[] props = t.GetProperties(BindingFlags.Public)
これは匿名型でも機能します。
public static string[] PropertiesFromType(object atype)
{
if (atype == null) return new string[] {};
Type t = atype.GetType();
PropertyInfo[] props = t.GetProperties();
List<string> propNames = new List<string>();
foreach (PropertyInfo prp in props)
{
propNames.Add(prp.Name);
}
return propNames.ToArray();
}
をそして、それはちょうどちょうど値に対してほぼ同じだ、またはあなたが使用することができます:
は名前だけを取得するには
GetDictionaryFromType().Keys
// or
GetDictionaryFromType().Values
をしかし、それは少し遅く、私は想像です。
... atype.GetProperty(prp.Name)はprpを返すでしょうか? –
ああ - そうだよ! D'oh。 –
私は今それを修正しました。 –
あなたはType.GetProperties()
mehodでSystem.Reflection
名前空間を使用することができます。私も要件のこの種の直面しています
PropertyInfo[] propertyInfos;
propertyInfos = typeof(MyClass).GetProperties(BindingFlags.Public|BindingFlags.Static);
。
私は別のアイデアを持って、この議論から、
Obj.GetType().GetProperties()[0].Name
これはまた、プロパティ名を示しています。
Obj.GetType().GetProperties().Count();
これはプロパティの数を示します。
ありがとうございます。これはいい話です。
public List<string> GetPropertiesNameOfClass(object pObject)
{
List<string> propertyList = new List<string>();
if (pObject != null)
{
foreach (var prop in pObject.GetType().GetProperties())
{
propertyList.Add(prop.Name);
}
}
return propertyList;
}
この機能は、クラスプロパティのリストを取得するための機能です。ここで
public class MyObject
{
public string value1 { get; set; }
public string value2 { get; set; }
public PropertyInfo[] GetProperties()
{
try
{
return this.GetType().GetProperties();
}
catch (Exception ex)
{
throw ex;
}
}
public PropertyInfo GetByParameterName(string ParameterName)
{
try
{
return this.GetType().GetProperties().FirstOrDefault(x => x.Name == ParameterName);
}
catch (Exception ex)
{
throw ex;
}
}
public static MyObject SetValue(MyObject obj, string parameterName,object parameterValue)
{
try
{
obj.GetType().GetProperties().FirstOrDefault(x => x.Name == parameterName).SetValue(obj, parameterValue);
return obj;
}
catch (Exception ex)
{
throw ex;
}
}
}
これを変更して 'yield return'を使うとよいでしょう。大したことではありませんが、それを実行するより良い方法です。 –
私はこれが好きです。なぜなら、* reflection *という単語を含まない唯一の答えだからです。 –
しかし、これはまだ**反射を使用しています。 – GGG
は@lucasjonesが答える改善されています。私は彼の答えの後にコメント欄で述べた改善を加えました。私は誰かがこれを役に立つと願っています。
public static string[] GetTypePropertyNames(object classObject, BindingFlags bindingFlags)
{
if (classObject == null)
{
throw new ArgumentNullException(nameof(classObject));
}
var type = classObject.GetType();
var propertyInfos = type.GetProperties(bindingFlags);
return propertyInfos.Select(propertyInfo => propertyInfo.Name).ToArray();
}
私のソリューションです
@ MarcGravellの回答に基づいて、ここにはUnity C#で動作するバージョンがあります。 (反射は、コンパイル時に固定され、動的実行時プロパティを可能に -
ObjectsClass foo = this;
foreach(var prop in foo.GetType().GetProperties()) {
Debug.Log("{0}={1}, " + prop.Name + ", " + prop.GetValue(foo, null));
}
- 1. DataGridViewはクラス内のプロパティのリストをどのように取得しますか?
- 2. Virtuosoのオントロジーのリストとそのプロパティとクラスを取得
- 3. ロードするクラスに必要なクラスのリストを取得する
- 4. javaのクラスのフィールドのリストを取得するには?
- 5. リフレクションを使用してクラスのリストからプロパティから値を取得する
- 6. javaのクラスからメソッドのリストを取得するには?
- 7. オブジェクトやクラスのメソッドのリストを取得するには?
- 8. GetPropertiesを使用してクラスのプロパティのリストを取得した後、親プロパティのクラスタイプを取得するにはどうすればよいですか?
- 9. リスト内の項目のプロパティを取得
- 10. Delphi RTTI:プロパティのクラスを取得
- 11. PHP:親クラスのプロパティ値を取得
- 12. 別のクラスC#からプロパティを取得
- 13. C#のネームスペースのクラスのリストを取得
- 14. ジェネリックタイプのプロパティを取得するには?
- 15. Phpクラスのプロパティ取得と設定
- 16. C#Reflectionを使用してクラスTからプロパティのリストを取得
- 17. OWLクラスのインスタンスのプロパティ値を取得する際の問題
- 18. apache.commonsを使用してプロパティのリストを取得する方法
- 19. カスタムCSSプロパティのリストを取得する方法
- 20. リスト(T)からプロパティを取得する、FOR EACH以外のオプション
- 21. 値のリストを取得するには?
- 22. Eclipse:クラスの属性のリストを取得するためのキーバインド
- 23. テンプレートクラスのクラスを取得するには?
- 24. リストはリスト<T>として送信されます。どのようにプロパティを取得するには?
- 25. リストの個別のプロパティ値の動的リストを取得するにはどうすればよいですか?
- 26. オブジェクトのすべてのプロパティのリストを取得
- 27. 入れ子のクラスで取得する唯一のプロパティ
- 28. リスト内のクラスのプロパティに基づいてPythonのリストを作る方法は?
- 29. C#のリストからプロパティのキー名を取得するには?私のようなリストがある場合
- 30. フラットファイルを別のクラスのプロパティであるリストに変換する
@Sukesh、完全性については答え – K48