Оценка передачи многих параметров

Я разобрался с решением. В приведенном выше коде нет ничего плохого, это были просто настройки безопасности в IE. По умолчанию они установлены на Medium-High, поэтому я изменил их на Medium, и код работал нормально.

9
задан Don Kirkby 2 November 2009 в 05:37
поделиться

10 ответов

Если бы я сделал бы что-нибудь, то это должно было бы создать структуру, которая содержит все параметры для получения хорошего intellisence и строгих имен.

public struct user 
{ 
    public string FirstName; 
    public string LastName; 
    public string zilionotherproperties; 
    public bool SearchByLastNameOnly; 
} 
public user[] GetUserData(user usr) 
{ 
    //search for users using passed data and return an array of users. 
} 
12
ответ дан 4 December 2019 в 07:24
поделиться

Передайте их индивидуально, потому что:

  • это - безопасный с точки зрения типов путь.
  • IntelliSense возьмет его в Visual Studio и когда Вы запишете свои функции вызова, Вы будете знать то, что что.
  • Это быстрее для выполнения того пути.

Если параметр действительно ЯВЛЯЕТСЯ массивом, тем не менее, затем передают массив. Пример:

Для функций, которые похожи на это, используйте эту нотацию:

Array FireEmployee(string first, string middle, string last, int id) {...}

Для функций, которые похожи на это, используйте массив:

Array FireEmployees(Employee[] unionWorkers) {...}
6
ответ дан 4 December 2019 в 07:24
поделиться

Ваш сценарий покрыт Представлять рефакторингом Объекта параметра в книге рефакторинга Martin Fowler. Книгой определенно стоит владеть, но для тех, кто не делает, рефакторинг описан здесь. Существует также предварительный просмотр на сайте издателя, и на книгах Google. Это рекомендует заменить параметры не массивом, но новым объектом.

4
ответ дан 4 December 2019 в 07:24
поделиться

Относительно Skeets комментируют мой пример, выше которого он использовал бы класс вместо структуры и возможно сделал бы его более ясным, где использовать класс и где использовать структуру, я отправляю это также. Я думаю, что существуют другие там, кому любопытно на предмет этого также.

Главная причина использовать класс, как я видел, была Вами, мог сделать это неизменным, но это возможно со структурами также?

например:

struct user 
{ 
public user(string Username, string LastName) 
{ 
    _username = Username; 
} 
private string _username; 
public string UserName { 
    get { return _username; } 
} 

}

Мне чувствовали долгое время, что я не знаю различий больше между классами и структурами теперь, когда у нас могут быть свойства, инициализаторы, поля и точно все, что класс имеет в структуре также. Я знаю, что классы являются типами refernce, и структуры являются типами значения, но какое значение это имеет в случае выше при использовании его в качестве параметра в функции?

Я нашел это описание различий на сайте, который http://www.startvbdotnet.com/oop/structure.aspx и то описание точно, как я отобразил его в голове:

Структуры могут быть определены как инструмент для обработки группы логически связанных элементов данных. Они являются пользовательскими и предоставляют метод для упаковки вместе данных различных типов. Структуры очень похожи на Классы. Как Классы, они также могут содержать участников, таких как поля и методы. Основное различие между классами и структурами, классы являются ссылочными типами, и структуры являются типами значения. На практике структуры используются для меньших легких объектов, которые долгое время не сохраняются, и классы используются для больших объектов, которые, как ожидают, будут существовать в памяти в течение длительных периодов.

Возможно, это должно быть собственным вопросом, но я чувствовал, что он был связан, когда у всех нас были различные взгляды относительно структуры по сравнению с вещью класса как параметр.

3
ответ дан 4 December 2019 в 07:24
поделиться

Я предполагаю, что Вы используете C# 4 и можете просто использовать названные параметры:

FireEmployee(
    first: "Frank",
    middle: "",
    last: "Krueger",
    id: 338);

Они делают код почти столь же читаемым как VB или Smalltalk.:-)

В противном случае я пошел бы с тем, что должен сказать Dave Markle.

2
ответ дан 4 December 2019 в 07:24
поделиться

Если это - код библиотеки, который будет видеть большое использование, и если некоторые параметры имеют типичные значения, которые являются кандидатами на значения по умолчанию, то необходимо рассмотреть совет Dave Markle, и обеспечивать selectio перегрузок с прогрессивно меньшим количеством параметров. Это - подход, рекомендуемый в Microsoft Framework Design Guidelines.

Поочередно, можно получить подобный эффект с подходом Stefan путем установки значений по умолчанию с членскими инициализаторами и использования прогрессии ctor перегрузок.

2
ответ дан 4 December 2019 в 07:24
поделиться

Если бы Вы действительно не хотите передавать в своих аргументах отдельно, я предложил бы создать новый класс, который инкапсулирует все Ваши аргументы. Вы можете (в Java, и скорее всего в C#) объявляют общедоступный внутренний класс в классе, содержащем непростой метод с этой целью. Это старается не иметь классы, плавающие, вокруг которого действительно просто типы помощника.

1
ответ дан 4 December 2019 в 07:24
поделиться

Я сказал бы, передают их индивидуально также. Мне не нравится идея создать класс, затем передавая тот класс до как аргумент. Это - форма связи штампа, что означает вносить изменения, будет более твердым, так как один класс использует другой. И многократное использование одного класса означает, что необходимо было бы снова использовать другой также.

Вы могли использовать интерфейс для сокращения связи штампа, но это является слишком много служебным для моих вкусов, так вот почему мне нравится передавать аргументы индивидуально.

1
ответ дан 4 December 2019 в 07:24
поделиться

Вам действительно нужны 8-9 параметров для единственной функции? Мне при необходимости в этом много параметров, затем вероятным выполнением слишком многих разных вещей в той функции кажется. Попытайтесь осуществить рефакторинг код в отдельные функции так, чтобы каждая функция имела точно одну цель.

0
ответ дан 4 December 2019 в 07:24
поделиться

Не передавайте их как массив, если функция не действует на массив, я не создал бы новую структуру данных ни один для группировки параметров по следующим причинам

  1. Передача новой структуры данных скрывает то, в чем функция действительно нужна, как введено (требуется всю структуру данных / часть его?)

  2. Связанный с 1 это делает UTs более трудный (при записи UT, необходимо воссоздать всю структуру данных),

  3. Если входные параметры не связаны, Вы заканчиваете с новой структурой данных что группы несвязанные типы данных ни по какой другой причине, чем заставить вызов функции выглядеть более опрятным

  4. Если Вы приняли решение передать новую структуру данных своей функции, функция не может использоваться в объеме, где новый datastructure был определен

Действительно единственный недостаток к передаче каждой параматери к функции - то, что Вы не смогли приспосабливать функцию в одной строке кода, но не забываете строки, в которых Вы нуждаетесь перед вызовом функции, в котором Вы заполните свою структуру данных.

-1
ответ дан 4 December 2019 в 07:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: