6
public class BaseDto
{
    public int ID{ get; set; }
}
public class Client: BaseDto
{
     public string Surname { get; set; }
     public string FirstName{ get; set; }
     public string email{ get; set; }    
}

PropertyInfo[] props = typeof(Client).GetProperties();

これにより、姓、名、電子メール、ID の順にプロパティが一覧表示されます。

プロパティを次の順序で表示する: ID、姓、名、電子メール

4

4 に答える 4

10

たぶんこれ?

// this is alternative for typeof(T).GetProperties()
// that returns base class properties before inherited class properties
protected PropertyInfo[] GetBasePropertiesFirst(Type type)
{
    var orderList = new List<Type>();
    var iteratingType = type;
    do
    {
        orderList.Insert(0, iteratingType);
        iteratingType = iteratingType.BaseType;
    } while (iteratingType != null);

    var props = type.GetProperties()
        .OrderBy(x => orderList.IndexOf(x.DeclaringType))
        .ToArray();

    return props;
}
于 2013-11-15T07:50:59.990 に答える
1

より迅速な方法があるかどうかはわかりませんが、まず、継承元の基本型の型を取得します。

    typeof(Client).BaseType

その後、bindingflags を使用して基本プロパティのみを取得できます。

    BindingFlags.DeclaredOnly

その後、Client タイプについても同じことを行い、結果を追加します。

于 2013-11-15T07:50:22.623 に答える
1

私はlinqベースのソリューションを好む:

var baseProps = typeof(BaseDto).GetProperties();
var props = typeof(Client).GetProperties();

var allProps = baseProps
   .Concat(props.Where(p => baseProps
      .Select(b => b.Name)
      .Contains(p.Name) == false));
于 2013-11-15T08:07:10.237 に答える
0

どうですか:

Dictionary<string, PropertyInfo> _PropertyIndex = new Dictionary<string, PropertyInfo>();

Type thisType = typeof(Client);

foreach (PropertyInfo pi in thisType.BaseType.GetProperties())
    _PropertyIndex.Add(pi.Name.ToUpper(), pi);
foreach (PropertyInfo pi in thisType.GetProperties())
    if( !_PropertyIndex.ContainsKey(pi.Name.ToUpper()))
        _PropertyIndex.Add(pi.Name.ToUpper(), pi);
于 2015-03-03T22:31:44.303 に答える