1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | using System; using System.Linq; using System.Collections.Generic; delegate bool OutFunc<T>(string input, out T value); static class Program { static void Main(string[] args) { var input = "123"; var r = input.ParseOrDefault(-1, int.TryParse); Console.WriteLine(r); } // 特化的に組み合わせたメソッド static T ParseOrDefault<T>(this string input, T defaultValue, OutFunc<T> tryParse) { return Return(input) .Select(s => TryParse(s, tryParse)) .Select(t => t.Item1 ? t.Item2 : defaultValue) .First(); } // 汎用的に使えるパーツ群 static IEnumerable<T> Return<T>(T value) { yield return value; } static Tuple<bool, T> TryParse<T>(string input, OutFunc<T> tryParse) { T value; return Tuple.Create(tryParse(input, out value), value); } } static class Tuple { public static Tuple<T1, T2> Create<T1, T2>(T1 item1, T2 item2) { return new Tuple<T1, T2>(item1, item2); } } class Tuple<T1, T2> { public readonly T1 Item1; public readonly T2 Item2; public Tuple(T1 item1, T2 item2) { Item1 = item1; Item2 = item2; } } |
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uTGlucTsKdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7CgpkZWxlZ2F0ZSBib29sIE91dEZ1bmM8VD4oc3RyaW5nIGlucHV0LCBvdXQgVCB2YWx1ZSk7CgpzdGF0aWMgY2xhc3MgUHJvZ3JhbQp7CiAgICBzdGF0aWMgdm9pZCBNYWluKHN0cmluZ1tdIGFyZ3MpCiAgICB7CiAgICAgICAgdmFyIGlucHV0ID0gIjEyMyI7CiAgICAgICAgdmFyIHIgPSBpbnB1dC5QYXJzZU9yRGVmYXVsdCgtMSwgaW50LlRyeVBhcnNlKTsKICAgICAgICBDb25zb2xlLldyaXRlTGluZShyKTsKICAgIH0KCiAgICAvLyDnibnljJbnmoTjgavntYTjgb/lkIjjgo/jgZvjgZ/jg6Hjgr3jg4Pjg4kKICAgIHN0YXRpYyBUIFBhcnNlT3JEZWZhdWx0PFQ+KHRoaXMgc3RyaW5nIGlucHV0LCBUIGRlZmF1bHRWYWx1ZSwgT3V0RnVuYzxUPiB0cnlQYXJzZSkKICAgIHsKICAgICAgICByZXR1cm4gUmV0dXJuKGlucHV0KQogICAgICAgICAgICAuU2VsZWN0KHMgPT4gVHJ5UGFyc2UocywgdHJ5UGFyc2UpKQogICAgICAgICAgICAuU2VsZWN0KHQgPT4gdC5JdGVtMSA/IHQuSXRlbTIgOiBkZWZhdWx0VmFsdWUpCiAgICAgICAgICAgIC5GaXJzdCgpOwogICAgfQoKICAgIC8vIOaxjueUqOeahOOBq+S9v+OBiOOCi+ODkeODvOODhOe+pAogICAgc3RhdGljIElFbnVtZXJhYmxlPFQ+IFJldHVybjxUPihUIHZhbHVlKQogICAgewogICAgICAgIHlpZWxkIHJldHVybiB2YWx1ZTsKICAgIH0KCiAgICBzdGF0aWMgVHVwbGU8Ym9vbCwgVD4gVHJ5UGFyc2U8VD4oc3RyaW5nIGlucHV0LCBPdXRGdW5jPFQ+IHRyeVBhcnNlKQogICAgewogICAgICAgIFQgdmFsdWU7CiAgICAgICAgcmV0dXJuIFR1cGxlLkNyZWF0ZSh0cnlQYXJzZShpbnB1dCwgb3V0IHZhbHVlKSwgdmFsdWUpOwogICAgfQp9CgpzdGF0aWMgY2xhc3MgVHVwbGUKewogICAgcHVibGljIHN0YXRpYyBUdXBsZTxUMSwgVDI+IENyZWF0ZTxUMSwgVDI+KFQxIGl0ZW0xLCBUMiBpdGVtMikKICAgIHsKICAgICAgICByZXR1cm4gbmV3IFR1cGxlPFQxLCBUMj4oaXRlbTEsIGl0ZW0yKTsKICAgIH0KfQoKY2xhc3MgVHVwbGU8VDEsIFQyPgp7CiAgICBwdWJsaWMgcmVhZG9ubHkgVDEgSXRlbTE7CiAgICBwdWJsaWMgcmVhZG9ubHkgVDIgSXRlbTI7CgogICAgcHVibGljIFR1cGxlKFQxIGl0ZW0xLCBUMiBpdGVtMikKICAgIHsKICAgICAgICBJdGVtMSA9IGl0ZW0xOwogICAgICAgIEl0ZW0yID0gaXRlbTI7CiAgICB9Cn0=
-
upload with new input
-
result: Success time: 0.06s memory: 14408 kB returned value: 0
123



