我有以下代码可跟踪应用程序中的错误:
Crashes.TrackError(ex,
new Dictionary<string, string> {
{"RunQuery", "Exception"},
{"sql", s },
{"Device Model", DeviceInfo.Model },
{"Exception", ex.ToString()}
});
现在我发现参数长度限制为125个字符。有没有一种方法可以代替添加:{"sql", s }
,而我可以将其分解为最大长度为125的倍数?
我需要的东西等同于:
Crashes.TrackError(ex,
new Dictionary<string, string> {
{"RunQuery", "Exception"},
{"sql", s1 },
{"sql", s2 },
{"sql", s3 },
{"Device Model", DeviceInfo.Model },
{"Exception", ex.ToString()}
});
这是通过方法调用生成的:
{"sql", s1 },
{"sql", s2 },
{"sql", s3 },
赞:
Crashes.TrackError(ex,
new Dictionary<string, string> {
{"RunQuery", "Exception"},
myMethod("sql", s),
{"Device Model", DeviceInfo.Model },
{"Exception", ex.ToString()}
});
答案 0 :(得分:2)
不,你不能。
但是您可以执行以下操作:
Crashes.TrackError(ex, DictionaryOfStringFromErrorInfo( s, DeviceInfo, ex ) );
然后您可以拥有这个:
IDictionary<string,string> DictionaryOfStringFromErrorInfo( string s,
DeviceInfo deviceInfo, Exception ex )
{
Dictionary<string,string> dictionary = new Dictionary<string, string>();
dictionary.Add( "RunQuery", "Exception" );
List<string> parts = s.ConvertToChunkList(125);
dictionary.Add( "Device Model", DeviceInfo.Model );
dictionary.Add( "Exception", ex.ToString() );
for( int i = 0; i < parts.Count; i++ )
dictionary.Add( "Sql" + i, parts[i] );
return dictionary;
}
您甚至可以将Crashes
传递给该函数,以便它也可以进行Crashes.TrackError()
调用。
话虽如此,您的Crashes.TrackError()
接受ex
,并且您还传递了ex.ToString()
,所以看起来很多余。
但是最重要的是,限制了125个字符的限制,而如今,从没有任何真正的技术理由可以实现这种限制。
如果从技术上讲消除此限制是可行的,那么无论花费多少,都不要休息,直到您将其删除。
如果您使用的某个产品有此限制,请扔掉该产品,然后再使用另一个。
如果您组织中的某些工程师“只是因为”将此限制放在适当的位置,请使其看起来像是发生了事故。