Я много искал, но ничего не нашел по этому вопросу. Я делаю журнал своего приложения и печатаю типы переменных и их значения. Я хочу сделать то же самое для каждого объекта, который я получаю в качестве параметра, и для каждого объекта, который я возвращаю тоже. Поэтому я возвращаю типизированный набор данных (MyDataSet, который определен как MyDataSetType, например), но я не могу получить имя MyDataSetType.
У меня есть метод, который дает набор данных, возвращает строку со всем содержимым. Примерно так:
string GetLogStringFromDataSetParameter(System.Data.DataSet incomingDataSet)
{
StringBuilder strReturn = new StringBuilder();
strReturn.Append("DataSet (type ");
strReturn.Append(GetTypeName(incomingDataSet));
strReturn.Append("). ");
// .. do some validations
strReturn.Append("Contains ");
strReturn.Append(incomingDataSet.Tables.Count);
strReturn.Append(" tables.");
for (int i = 0; i < incomingDataSet.Tables.Count; i++)
{
System.Data.DataTable table = incomingDataSet.Tables[i];
strReturn.Append(" Tabla " + table.TableName + " (" + i + ") ");
strReturn.Append(<Method to list table content>);
}//yes, this could have been a foreach loop...
return FormatStringToLog(strReturn);
} //end
Как видите, я использую свой собственный метод GetTypeName для получения имени моего набранного набора данных. Я сделал этот метод после некоторого исследования через этот сайт:
public static string GetTypeName<T>(T parameter)
{
string strReturn = typeof(T).Name;
if (strReturn.IndexOf("Nullable") >= 0)
strReturn = Nullable.GetUnderlyingType(typeof(T)).Name;
else if (strReturn.IndexOf("List") >= 0)
{
strReturn = "List of " + typeof(T).GetGenericArguments()[0].Name;
if (strReturn.IndexOf("Nullable") >= 0)
strReturn = "List of " + Nullable.GetUnderlyingType(typeof(T).GetGenericArguments()[0]).Name;
}
return strReturn;
}
Когда я нахожусь внутри метода GetLogStringFromDataSetParameter, если я пытаюсь использовать typeof (MyDataSet), он возвращает правильно MyDataSetType. Но когда я выполняю вызов GetTypeName, он возвращает только DataSet, универсальный тип. Почему это? Есть ли способ получить правильно MyDataSetType без прямого вызова typeof ()?
Надеюсь, я все объяснил достаточно ясно. Заранее спасибо.