ふらっと C#,C♯,C#(初心者用) Part124 [無断転載禁止]©5ch.io
■ このスレッドは過去ログ倉庫に格納されています
0679デフォルトの名無しさん (ワッチョイ 83dc-U9f6)
2016/09/18(日) 08:58:10.66ID:FLMBUfED0メンバに順序は無いので、何らかの手段で順序情報を付加してやる必要がある。
その上で、リフレクションを使って動的に値をセットする。
たとえばカスタム属性を使って以下のようにする。(動くかどうかは知らん)
public class OrderAttribute : Attribute {
public Order(int value) { this.Value = value; }
public int Value { get; private set; }
}
public class ListValue {
[Order(0)] public string Col1 {get; set;}
[Order(1)] public string Col2 {get; set;}
}
public static class TsvLoader {
public static IEnumerable<ListValue> LoadFromFile<T>(string filename) =>
File.ReadLines(filename)
.Select(line => line.Split(‘¥t’))
.Select(DeserializeRow);
public static T DeserializeRow<T> where T : class, new() (IEnumerable<string> row) {
var propvals = typeof(T).GetProperties()
.OrderBy(prop => ((OrderAttribute)p.GetAttribute(typeof(OrderAttribute))).Value)
.Zip(row, (prop, val) => new { Property = prop, Value = val });
var obj = new T();
foreach (var propval in propvals) { propval.Property.SetValue(obj, propval.Value); }
return obj;
}
}
こんなことするより素直に>>678の方がいいと思うけど
■ このスレッドは過去ログ倉庫に格納されています