хорошо, для начала вам нужен пример кода:
foreach (string item in buf)
{
row = bulkInserTable.NewRow();
row["Name"] = item;
bulkInserTable.Rows.Add(row);
}
Хотя это все еще показывает проблему, по крайней мере, по реальной причине
Причиной этого является то, что при создании таблицы данных применяются параметры сравнения по умолчанию:
this._compareFlags = CompareOptions.IgnoreWidth
CompareOptions.IgnoreKanaType |
CompareOptions.IgnoreCase;
Из документов Ширина игнорирования:
Указывает, что сравнение строк должно игнорировать ширину символа. Например, японские символы катакана могут быть написаны как полная ширина или половина ширины. Если выбрано это значение, символы катакана, написанные как полная ширина, считаются равными тем же символам, написанным как полуширина.
System.Globalization.CultureInfo.CurrentCulture.CompareInfo.Compare(
"2ch", "2ch", System.Globalization.CompareOptions.IgnoreWidth);
возвращает 0, то есть идентично
Я настоятельно рекомендую вам сделать считать такие значения идентичными или вызвать дальнейшую путаницу, однако, если вы действительно хотите изменить это:
//CaseSensitive property uses this under the hood
internal bool SetCaseSensitiveValue(
bool isCaseSensitive, bool userSet, bool resetIndexes)
{
if (!userSet && (
this._caseSensitiveUserSet || (this._caseSensitive == isCaseSensitive)))
{
return false;
}
this._caseSensitive = isCaseSensitive;
if (isCaseSensitive)
{
this._compareFlags = CompareOptions.None;
}
else
{
this._compareFlags = CompareOptions.IgnoreWidth |
CompareOptions.IgnoreKanaType |
CompareOptions.IgnoreCase;
}
if (resetIndexes)
{
this.ResetIndexes();
foreach (Constraint constraint in this.Constraints)
{
constraint.CheckConstraint();
}
}
return true;
}
Таким образом, вы можете игнорировать регистр и полностью отключить опции комплексного сравнения.
Если вы хотите создать словарь с таким же поведением, используйте следующий компаратор:
public class DataTableIgnoreCaseComparer : IEqualityComparer<string>
{
private readonly System.Globalization.CompareInfo ci =
System.Globalization.CultureInfo.CurrentCulture.CompareInfo;
private const System.Globalization.CompareOptions options =
CompareOptions.IgnoreCase |
CompareOptions.IgnoreKanaType |
CompareOptions.IgnoreWidth;
public DataTableIgnoreCaseComparer() {}
public bool Equals(string a, string b)
{
return ci.Compare(a, b, options) == 0;
}
public int GetHashCode(string s)
{
return ci.GetSortKey(s, options).GetHashCode();
}
}