私はexcellibraryを使用する言語クラスを持っています。私は3つの列を持つ.xlsファイルを持っています。最初は、キーフレーズがドキュメントで使用されているかどうかを確認するために使用され、私は使用する言語ごとに1つの列を持っています。私は、ドキュメントのすべての行に対してtransactionFieldオブジェクトを作成したいと思います。私はそれをしようとするが、私は新しいオブジェクトを作成するたびに作成されたすべてのオブジェクトは、最後に作成されたオブジェクトの値を取る。私が間違っているところを私に説明してください。どうすればその問題を解決できますか? 間違いはここ新しいオブジェクトを作成するすべてのオブジェクトを更新します
TranslationField tnf = new TranslationField();
tnf.Used = false;
tnf.Strings = values;
Translations.Add(sKey, tnf);
public class Languages
{
public static bool Setup()
{
SupportedLanguages.Clear();
SupportedLanguages.Add(csDefaultLang);
try
{
Workbook book = Workbook.Load(sPath);
Worksheet sheet = book.Worksheets[0];
KeyStringHelper values = new KeyStringHelper();
TranslationNeedle tnl;
List<string> columns = new List<string>();
string sKey = "";
// traverse rows by Index
for (int rowIndex = sheet.Cells.FirstRowIndex; rowIndex <= sheet.Cells.LastRowIndex; rowIndex++)
{
Row row = sheet.Cells.GetRow(rowIndex);
row.FirstColIndex = 1;
for (int colIndex = row.FirstColIndex; colIndex <= row.LastColIndex; colIndex++)
{
Cell cell = row.GetCell(colIndex);
// the first excel row is assumed to be columns names
if (rowIndex == sheet.Cells.FirstRowIndex)
{
//Columns names correctly formatted
columns.Add(char.ToUpper(cell.StringValue[0]) + cell.StringValue.Substring(1).ToUpper());
//Register every language inside the xls
SupportedLanguages.Add(char.ToUpper(cell.StringValue[0]) + cell.StringValue.Substring(1).ToUpper());
}
else
{
if (colIndex - row.FirstColIndex == 0)
sKey = cell.StringValue.Replace("\r\n", "\n");
else
values.Add(columns[colIndex - row.FirstColIndex], cell.StringValue.Replace("\r\n", "\n"));
}
}
// add the cell values to Translations Dictionary
if (rowIndex != sheet.Cells.FirstRowIndex)
{
TranslationField tnf = new TranslationField();
tnf.Used = false;
tnf.Strings = values;
Translations.Add(sKey, tnf);
}
}
//other stuff
}
}
が起こる場所ですあなたがすべてのTranslationField
に同じKeyStringHelper
インスタンス(values
)を再利用しているクラスTranslationField
class TranslationField
{
public bool Used = false;
public KeyStringHelper Strings = new KeyStringHelper();
}
これを[mcve]として再現してください。問題がどこにある可能性が高い 'TranslationField'クラスも表示していないことに注意してください。 –
申し訳ありません、答えを編集します –
あなたが試したことは何ですか?あなたのコードに基づいて、私はどこにコードが間違っているのか分かりません。コードがどこに間違っているのかを教えてください。StackOverflowでは、「この機能要件をどうやって解決するのですか?」と尋ねるよりもはるかに優れています...そして、あなたの質問は、 。 – code4life