- ふらっと C#,C♯,C#(初心者用) Part124 [無断転載禁止]©2ch.net
679 :デフォルトの名無しさん (ワッチョイ 83dc-U9f6)[sage]:2016/09/18(日) 08:58:10.66 ID:FLMBUfED0 - >>677
メンバに順序は無いので、何らかの手段で順序情報を付加してやる必要がある。 その上で、リフレクションを使って動的に値をセットする。 たとえばカスタム属性を使って以下のようにする。(動くかどうかは知らん) 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の方がいいと思うけど
| - ふらっと C#,C♯,C#(初心者用) Part124 [無断転載禁止]©2ch.net
685 :デフォルトの名無しさん (ワッチョイ 83dc-wJFc)[sage]:2016/09/18(日) 19:21:44.92 ID:FLMBUfED0 - >>683
UWP使えば
| - ふらっと C#,C♯,C#(初心者用) Part124 [無断転載禁止]©2ch.net
688 :デフォルトの名無しさん (ワッチョイ 83dc-W8Ns)[sage]:2016/09/18(日) 23:11:20.92 ID:FLMBUfED0 - >>687
共変で間違ってないよ https://msdn.microsoft.com/en-us/library/mt654055.aspx
|
|