0

Silverlightアプリをデバッグしていますが、配列のインデックスが範囲外であるという問題が発生しています。私はDataTable.Selectステートメントの構文に精通しておらず、アプリの開発者は次の10日間は町を離れています。この線

searchParamsTable.Select(string.Format( "TABLE = {0} AND FIELD ='{1}'"、tableNumbers [i]、fieldName [i]))[0] ["VALUE"] = wildcardedSearchString;

以下のコードから、「範囲外のインデックスが発生します。これは、i = 1の場合、「i」の2回目の反復で発生します。この状況で[0]["VALUE"]が何を表すかはわかりません。 。誰かがこの文字列でそれが何を表しているのかを説明できれば、私はそれを大いに感謝します!

if (i < 2 || country != -1)
{
    if (!string.IsNullOrEmpty(wildcardedSearchString))
    {
        searchParamsTable.Select(string.Format("TABLE = {0} AND FIELD = '{1}'", tableNumbers[i], fieldName[i]))[0]["VALUE"] = wildcardedSearchString;

        MarkRequiredParametersForSearch(searchParamsTable);

        returnList = GetSearchResults(contactType, session, searchParamsTable, returnList,
            (int)searchParamsTable.Select(string.Format("TABLE = {0} AND FIELD = '{1}'", tableNumbers[i], fieldName[i]))[0]["FIELDNO"]);

        // Filter by authority type if necessary.
        if (authorityType != AuthorityType.Unknown)
        {
            var results = from EntitySearchResult result in returnList
                          where result.SubType == (int)authorityType
                          select result;
            if (results != null)
            {
                returnList = results.ToList();
            }
        }
    }
}
4

1 に答える 1

2

DataTable.Search()を返すDataRow[]ので、[0]["VALUE"]はによって返された最初の行から「VALUE」列の値を取得しますSearch

次のように書き直すことができます。

DataRow[] foundRows searchParamsTable.Select(string.Format("TABLE = {0} AND FIELD = '{1}'", tableNumbers[i], fieldName[i]));
DataRow firstRow = foundRows[0];
firstRow["VALUE"] = wildcardedSearchString;

コード例から、インデックスが範囲外の例外となる場所がいくつかあるように見えます。

  1. tableNumbersには1つの要素しかありません
  2. fieldNameには要素が1つだけあります
  3. Searchゼロ行を返します。
于 2012-07-12T17:31:16.163 に答える