개체를 일반 IList로 캐스팅하는 데 문제가 있습니다. 이 문제를 해결하기 위해 성명을 발표 할 그룹이 있지만이 작업을 수행하는 더 좋은 방법이 있어야합니다.C# Generics 및 주조 문제
이 내 현재의 방법입니다 :
values = BuildClause((IList<colFilter.ColumnType>)colFilter.Value, prefix);
또는
values = BuildClause((IList<typeof(colFilter.ColumnType)>)colFilter.Value, prefix);
또는
values = BuildClause((IList<colFilter.ColumnType.GetType()>)colFilter.Value, prefix);
:
string values;
if (colFilter.Value is IList<int>)
{
values = BuildClause((IList<int>)colFilter.Value, prefix);
}
else if (colFilter.Value is IList<string>)
{
values = BuildClause((IList<string>)colFilter.Value, prefix);
}
else if (colFilter.Value is IList<DateTime>)
{
values = BuildClause((IList<DateTime>)colFilter.Value, prefix);
}
else if (...) //etc.
는 내가하고 싶은 것은 이것이다 , 형식 또는 네임 스페이스 이름 'colFilter은'내 예에서
이 colFilter.ColumnType는 int이며 (당신은 using 지시문 또는 어셈블리 참조가?)를 찾을 수 없습니다 :
이들 각각은이 컴파일러 오류가 발생합니다 문자열, 날짜 시간 등. 왜 이것이 작동하지 않는지 모르겠습니다.
아이디어가 있으십니까?
편집 :이 여기에 C# 2.0
편집 # 2
이다 인 BuildClause 방법 (I 각 유형에 대한 과부하를) 다음을 수행 무엇
private static string BuildClause(IList<int> inClause, string strPrefix)
{
return BuildClause(inClause, strPrefix, false);
}
private static string BuildClause(IList<String> inClause, string strPrefix)
{
return BuildClause(inClause, strPrefix, true);
}
private static string BuildClause(IList<DateTime> inClause, string strPrefix)
{
return BuildClause(inClause, strPrefix, true);
}
//.. etc for all types
private static string BuildClause<T>(IList<T> inClause, string strPrefix, bool addSingleQuotes)
{
StringBuilder sb = new StringBuilder();
//Check to make sure inclause has objects
if (inClause.Count > 0)
{
sb.Append(strPrefix);
sb.Append(" IN(");
for (int i = 0; i < inClause.Count; i++)
{
if (addSingleQuotes)
{
sb.AppendFormat("'{0}'", inClause[i].ToString().Replace("'", "''"));
}
else
{
sb.Append(inClause[i].ToString());
}
if (i != inClause.Count - 1)
{
sb.Append(",");
}
}
sb.Append(") ");
}
else
{
throw new Exception("Item count for In() Clause must be greater than 0.");
}
return sb.ToString();
}
코드를 실행합니다. 내가 한 값 = BuildClause (colFilter.Value, 접두사); 괜찮아 보인다. colFilter.Value가 IList 유형 인 것으로 확신되면 확인해야합니다. –
그게 나를 위해 작동하지 않는 것, 난 컴파일러 오류가 발생 : 어떤 BuildClause 과부하가 있습니까? – Jon