private bool TryParseOf<TType>(string s, out TType result)
{
if (typeof(TType) == typeof(int))
{
var parseSuccessful = int.TryParse(s, out var innerResult);
result = innerResult; // в этой строке проблема
return parseSuccessful;
}
throw new NotImplementedException();
}
нельзя просто взять и привести. TType
может быть int
, string
, etc.
private bool TryParseOf<TType>(string s, out TType result)
{
var converter = TypeDescriptor.GetConverter(typeof(TType));
try
{
result = (TType)converter.ConvertFromString(s);
}
catch (ArgumentException)
{
result = default;
return false;
}
return true;
}
Если делаем для простых типов, то
public class MyClass
{
public bool TryParseOf<TType>(string s, out TType result)
{
var converter = TypeDescriptor.GetConverter(typeof(TType));
if (converter.CanConvertFrom(typeof(string)))
{
result = (TType)converter.ConvertFrom(s);
return true;
}
result = default(TType);
return false;
}
}
Проверка
var c = new MyClass();
if (c.TryParseOf("11", out int i)) Console.WriteLine(i); // 11
if (c.TryParseOf("11", out double j)) Console.WriteLine(j); // 11
В принципе, приведение можно сделать через object
, но я не уверен, будут ли там тогда лишняя упаковка и распаковка. Если будут, то способ мне не очень нравится.
https://ideone.com/ziADyJ
using System;
public class Test
{
private static bool TryParseOf<TType>(string s, out TType result)
{
if (typeof(TType) == typeof(int))
{
var parseSuccessful = int.TryParse(s, out int innerResult);
result = (TType)(object)innerResult;
return parseSuccessful;
}
throw new NotImplementedException();
}
public static void Main()
{
Console.WriteLine("{0}: {1}", TryParseOf1<int>("123", out var x), x);
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
При уничтожении игрового объекта Destroy(gameobject); подвисает на секунду играПричина этому проклятая библиотека A* Pathfinding Project Выключая главный...
В моемNet Core приложении я хранил данные в классе DataService
Есть 5x5 матрица квадратов в произвольной части экранаКак найти координаты (x, y) в центре каждого квадрата?