@NoCode12

Как упростить переменную в C#?

Как можно укоротить Encoding.ASCII.GetString(Convert.FromBase64String....
А то куча таких строк и везде писать: Encoding.ASCII.GetString(Convert.FromBase64String
Можно как то переменной сделать что бы короче было? не могу понять только как.

LocalData + Encoding.ASCII.GetString(Convert.FromBase64String("Тут")), 
            LocalData + Encoding.ASCII.GetString(Convert.FromBase64String("Все ")), 
            LocalData + Encoding.ASCII.GetString(Convert.FromBase64String("значения")), 
            LocalData + Encoding.ASCII.GetString(Convert.FromBase64String("будут")), 
            LocalData + Encoding.ASCII.GetString(Convert.FromBase64String("совершенные")), 
            LocalData + Encoding.ASCII.GetString(Convert.FromBase64String("Разные")),
  • Вопрос задан
  • 354 просмотра
Решения вопроса 1
FoggyFinder
@FoggyFinder
Можно вынести в отдельную функцию:

string CreateASCIIStr(string value) => Encoding.ASCII.GetString(Convert.FromBase64String(value));


или, в локальную, с использованием LocalData:

string CreateASCIIStr(string value) =>
                LocalData + Encoding.ASCII.GetString(Convert.FromBase64String(value));


Добавлено:

Пояснение: если у вас есть многократное повторение вызовов одних и тех-же методов (или функций) с разницей в один параметр, то логичным решением будет определить вспомогательную функцию (возможно локальную), в которой будет происходить цепочка вызовов.

В данном случае у вас есть многократный последовательный вызов двух методов:

Convert.FromBase64String и Encoding.ASCII.GetString

для удобства их совмещаем в один вызов и получаем

Encoding.ASCII.GetString(Convert.FromBase64String(value))

Пример:

string LocalData = "0";
string CreateASCIIStr(string value) =>
    LocalData + Encoding.ASCII.GetString(Convert.FromBase64String(value));

var data = new[] {
    CreateASCIIStr("Тут"),
    CreateASCIIStr("Все"),
    CreateASCIIStr("значения"),
    CreateASCIIStr("будут"),
    CreateASCIIStr("совершенные"),
    CreateASCIIStr("Разные")
};


Здесь возвращается массив, но если ваши совершенно разные значения в действительности являются массивом, то и обрабатывать их лучше как массив ;-)
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
mindtester
@mindtester Куратор тега C#
делаю странные вещи..чаще на C#.. иногда за деньги
а еще можно сделать расширение
для приведенного фрагмента что то типа
public static string b64toASCII(this string s) => Encoding.ASCII.GetString(Convert.FromBase64String(s));

преобразуем исходный фрагмент
LocalData + "Тут".b64toASCII(), 
            LocalData + "Все ".b64toASCII(), 
            LocalData + "значения".b64toASCII(), 
            LocalData + "будут".b64toASCII(), 
            LocalData + "совершенные".b64toASCII(), 
            LocalData + "Разные".b64toASCII(),


ps base64 явно не нужен для литералов набранных в редакторе. они вообще не требуют дополнительной обработки. это похоже на данные получаемые из сети к примеру. если разделение запятой не ошибка, значит формируется массив. и если LocalData постоянное значение для массива, можно еще и LINQ притянуть
// сначала собираем base64 данные в массив. с большой вероятностью такой код будет проще
// пока в нем нет обработок.
// допустим этот массив называется b64data. тогда итоговый массив можно получить одной строкой
var target = b64data.Select(x => (LocalData + x.b64toASCII())).ToArray();
// ToArray() можно заменить на ToList() при желании,
// но если и дальше использовать LINQ, проще так и шпарить IEnumerable<string>
// в смысле убрать .ToArray() вообще
Ответ написан
sarapinit
@sarapinit
Точу водой камень
class Program
    {
        static string DoSomeMagic(string localData, params string[] base64Strings)
        {
            var sb = new StringBuilder(localData);
            foreach (var base64String in base64Strings)
            {
                sb.Append(Encoding.ASCII.GetString(Convert.FromBase64String(base64String)));
            }

            return sb.ToString();
        }

        static void Main(string[] args)
        {
            var localData = string.Empty;
            localData = DoSomeMagic(localData, "Тут", "все", "значения", "будут", "совершенно", "разные");
        }
    }
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы