LINQ - добавление функции к текстовому тексту - PullRequest
3 голосов
/ 16 июня 2011

У меня есть таблица linq "KUND", которая только для меня. В нем есть некоторые специальные символы, для которых у меня есть функция-писатель, позволяющая переключать их на те, которые я хочу.

public static string changeSpecialCharacters(string kund)
    {
        StringBuilder b = new StringBuilder(kund);

        b = b.Replace("Õ", "å");
        b = b.Replace("┼", "Å");
        b = b.Replace("õ", "ä");
        b = b.Replace("─", "Ä");
        b = b.Replace("÷", "ö");
        b = b.Replace("Í", "Ö");
        b = b.Replace("'", " ");
        b = b.Replace("¦", "´");
        b = b.Replace("Ï", "Ø");

        return b.ToString();
    }

Теперь у меня есть два вопроса:

1 Могу ли я добавить эту функцию в GET в автоматически сгенерированном текстовом тексте, чтобы мне не приходилось вызывать ее по всему коду? Я добавил его, но он, кажется, удаляется всякий раз, когда я меняю свой текстовый текст (добавить / удалить таблицу). 2 Есть предложения, как улучшить эту функцию в отношении скорости?

Ответы [ 2 ]

3 голосов
/ 16 июня 2011

Никогда не редактируйте .designer.cs; вместо этого добавьте второй файл и используйте partial class для добавления метода, например:

namespace Your.Namespace
{
    partial class YourDataContext
    {
        // your methods here
    }
}

Нет; Вы не можете добавить это, чтобы получить. Однако другой альтернативой является метод extension :

namespace Some.Utility.Namespace
{
    public static class SomeUtilityClass
    {
        public static string ChangeSpecialCharacters(this string kund)
        { ... } // note the "this" in the above line
    }
}

Теперь вы можете использовать:

string name = obj.Name.ChangeSpecialCharacters();

лично я переименовал бы это, чтобы уточнить направление изменения, и иметь два метода - один для кодирования, другой для декодирования.


Повторно сделаем это для набора данных; возможно:

public static IEnumerable<SomeType> ChangeSpecialCharacters(
    this IEnumerable<SomeType> items)
{
    foreach(var item in items)
    {
        item.Name = item.Name.ChangeSpecialCharacters();
        item.Foo = item.Foo.ChangeSpecialCharacters();
        ...
        item.Bar = item.Bar.ChangeSpecialCharacters();
        yield return item;
    }
}
0 голосов
/ 16 июня 2011

вероятно, вы могли бы инициализировать вашу переменную как:

private string kund;
public string Kund
{
    get
    {
        return changeSpecialCharacters(string kund);
    }
    set
    {
        kund = value;
    }
}
...