C# Многомерный ассоциативный массив или перегрузка свойств

144
21 ноября 2019, 12:10

Те кто изучал java script или php, а потом переходили на C# наверное меня поймут. Как они бедные обходятся без многомерных ассоциативных массивов без строгой типизации и приведения типов? В общем ситуация такая - есть возможность написать кусок программы, ограничение в 10000 символов, ничего своего подгружать нельзя никакие Hashtable OR Dictionary. Вся прелесть работы с многомерными ассоциативными массивами - в том что можно быстро - максимально быстро обратиться к его элементу по ключу - будь то числу или строке. в PHP таким примером может служить

['животные домашние'=>['кошка','собака','хомячок'],0=>['домашние','дикие'],'свойства'=>['пушистость'],25=>[1985, 1990,1995]]

Читал форумы C# - там говорят - зачем вам ассоциативные массивы? - используйте классы, это конечно прекрасно, но как обращаться к свойствам этих классов на других языках(здесь имеется ввиду алфавит разных языков мира и поддерживает ли C# UTF-8 - например создать свойство класса на русском?) или по цифре? и как мне добавить свойство в уже имеющийся объект на C#, удалить из объекта свойство или может быть назначить свойству объекта значение отличное от типа, указанного в свойстве этого объекта?

На php я бы сделал это просто:

class a
{
    protected $params = [];
    public function __set($name, $value){
        $this->params['$name'] = $value;
    }
    public function __get($name){
        return $this->params['$name'];
    }
}
$a_obj = new a();
$a_obj->some_param = [1987,'name'=>'Hero'];
echo $a_obj->some_param[0];
echo $a_obj->some_param['name'];

выведет 1987Hero

в общем - уважаемые программисты на C# помогите перейти к пониманию - как вы работаете с данными - типы которых вам не известны и количество тоже - возможно вы пишите какие то свои костыли на подобии перегрузки методов - смотрите к какому типу данных относятся входящие данные, заносите в LIST с указанным типом данных - и опять же как положить в лист LIST данные с определенным индексом, например [25=>'mehanic', 58=>'auto'] - там обычно кладутся как попало - стек [0=>'mehanic',1=>'auto'] В общем для тех кто не понял - скажите я поясню свой вопрос.

P.S. вот эта тема для понимания сильно тормозит понимание всего языка в целом, из за этого он кажется каким то ущербным в использовании. Спасибо за понимание и за то что дочитали

Добавил 25.03.2019 наткнулся на рекомендации от Microsoft

var contacts = new[]
{
    new {
        Name = " Eugene Zabokritski",
        PhoneNumbers = new[] { "206-555-0108", "425-555-0001" }
    },
    new {
        Name = " Hanying Feng",
        PhoneNumbers = new[] { "650-555-0199" }
    }
};

Источник

Answer 1

Многомерные ассоциативные массивы реализуются путем применения следующей конструкции

var contacts = new[]
{
    new {
        Name = " Eugene Zabokritski",
        PhoneNumbers = new[] { "206-555-0108", "425-555-0001" }
    },
    new {
        Name = " Hanying Feng",
        PhoneNumbers = new[] { "650-555-0199" }
    }
};

Источник MIcrosoft

Также тем, кто впервые столкнулся со строго типизированным языком программирования в помощь будет эта статья. Здесь вы найдете аналогию с JS и как пример использования callback функций.

Answer 2

В С# для национального языка есть понятие Culture System.Globalization

Посмотреть текущуй язык можно выполнив:

Console.WriteLine(System.Globalization.CultureInfo.CurrentCulture.ToString());

изменить культуру:

 System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("ru-RU");
 System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("ru-RU");

Интернационализация: обеспечение возможности использования приложения без языковых или культурных барьеров. Информация о языке и культуре поступает из ресурса, а не жестко закодирована в приложении.
Локализация: перевод и включение продукта для определенной локали. На основе файла ресурсов приложение переводится на язык и культуру.

Подробнее тут https://docs.microsoft.com/en-us/dotnet/standard/globalization-localization/

Есть много сторонних инструментов для локализации, например https://marketplace.visualstudio.com/items?itemName=PhilJollans.Multi-LanguageforVisualStudio

Попробуйте этот или другой инструмент на ваш выбор, не начинайте с 'ручных' правок.

READ ALSO
C# - Фильтр в эксель с использованием цикла

C# - Фильтр в эксель с использованием цикла

Подскажите как можно сделать следующие:

125
Как вставить пробелы?

Как вставить пробелы?

У меня есть текст в RichTextBox, мне надо чтоб считывались все пробелы(если у меня 2 пробела, то они не считывались как один)Это мне надо для выравнивания...

113