Задать вопрос
Ответы пользователя по тегу C#
  • Как в C# в динамике задать у обощенного класса тип поля хранимого значения?

    @MonadTeq
    1. Хотя бы вот так:

    for (int i = 0; i < _arguments.Length; i++)
            {
                Type type = _keyType[i].Type; //Вот здесь тип извлекается, и им нужно  типизировать обощенный класс Argument
                Type genericType = typeof(Argument<>).MakeGenericType(type);
                _arguments[i] = (IArgument)Activator.CreateInstance(genericType);
            }


    2. По CS0118 - Имеет смысл поразмышлять, почему в языке со строгой типизацией выдаётся такая ошибка, при том, что строчкой выше Вы сами пытветесь определить тип в Run-time, а в другой строчке ниже пишете default - для какого типа default? Может имеет смысл сначала понять основы С#/CLR?
    Ответ написан
    2 комментария
  • Как использовать все потоки процессора при вычислении числа Фибоначчи в C#?

    @MonadTeq
    Если задача загрузить CPU на 100%, то можете в момент Вашей работающей программы запустить перекодирование видео, например. На все ядра. Может ещё и тротлинг получите. Шутка.

    Линейные рекуррентные последовательности, есть мнение, плохо распараллеливаются в вычислениях членов. Чисто по определению. Если не нравится скорость вычислений, то можно попробовать другие ЯП или архитектуры машины.
    ASM даст результат получше, например.

    P.S. И уберите декларацию буфера (temp) из тела цикла. Глаз режет :)
    Ответ написан
    Комментировать
  • Вопрос по объектам c#?

    @MonadTeq
    1. У классов в C# нет никаких параметров. Параметры есть у конструкторов классов или методов.
    2. Ответ на твой вопрос (как я его понял, хотя и было тяжело):
    using System;
    using System.Linq;
    					
    public class Program
    {
      public static void Main()
      {
        var id = 2; 
        var arr = new [] { 
          new { Id = 1, Name = "Первый"},  
          new { Id = 2, Name = "Второй"}, 
          new { Id = 3, Name = "Третий"} 
        };		
    	
        foreach (var o in arr.Where(x=>x.Id == id))
        {
          Console.WriteLine(o.Name);
        }
      }
    }

    Но он тебе ничего не даст, так как ты не поймёшь почему выведется Второй. Или что за объекты в массиве, или почему я не стал использовать расширение .ForEach().

    Прежде, чем что-то делать, разберись с основными понятиями языка, чтобы не спрашивать элементарные вещи.
    Это, если тебя действительно интересует профессия в дальнейшем.
    Ответ написан
    Комментировать
  • Как сделать суммирование рандомных чисел?

    @MonadTeq
    Эх...WinForms. Как вспомню, так вздрогну. В дремучее время было как-то так:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Runtime.CompilerServices;
    using System.Windows.Forms;
    
    using MonadTeq.Toster.UI.Annotations;
    
    namespace MonadTeq.Toster.UI
    {
      /// <summary>
      /// An abstraction of view model for data binding.
      /// </summary>
      public abstract class ViewModel
        : INotifyPropertyChanged
      {
        public event PropertyChangedEventHandler PropertyChanged;
    
        [NotifyPropertyChangedInvocator]
        protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
        {
          PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
    
        protected bool UpdateProperty<T>(ref T oldValue, T newValue, [CallerMemberName] string propertyName = null)
        {
          if (EqualityComparer<T>.Default.Equals(oldValue, newValue))
          {
            return false;
          }
    
          oldValue = newValue;
          OnPropertyChanged(propertyName);
          return true;
        }
      }
    
      /// <summary>
      /// Represents a view model for business logic.
      /// </summary>
      public sealed class RandomSummaryViewModel
        : ViewModel
      {
        private int _accumulatedValue;
        private int _value;
    
        public RandomSummaryViewModel(int initialValue = 0)
        {
          _accumulatedValue = initialValue;
        }
    
        public int Value
        {
          get => _value;
          set => UpdateProperty(ref _value, value);
        }
    
        public int AccumulatedValue
        {
          get => _accumulatedValue;
          set => UpdateProperty(ref _accumulatedValue, value);
        }
      }
    
      public partial class RandomNumberSumForm : Form
      {
        private readonly RandomSummaryViewModel _vm = new RandomSummaryViewModel();
        private readonly Random _rnd = new Random();
    
        public RandomNumberSumForm()
        {
          InitializeComponent();
    
          //
          // Configure data bindings here...
          //
    
          // Bind text box (id: tbxCurrentRandom) property Text to 'Value' property of RandomSummaryViewModel instance...
          tbxCurrentRandom.DataBindings.Add("Text", _vm, "Value", false, DataSourceUpdateMode.OnPropertyChanged);
    
          // The same but for label (See logic above)
          lblSum.DataBindings.Add("Text", _vm, "AccumulatedValue", true, DataSourceUpdateMode.OnPropertyChanged);
        }
    
        private void btnNextRandom_Click(object sender, EventArgs e)
        {
          _vm.Value = _rnd.Next(0, 100);
          _vm.AccumulatedValue += _vm.Value;
        }
      }
    }


    Сумеете объяснить, что тут происходит и добавить сумму по следующему нажатию, а не мгновенно - приходите junior'ом :)
    Ответ написан