C # XNA Xbox, в этом случае необязательные параметры не являются обязательными - PullRequest
1 голос
/ 29 февраля 2012

По-видимому, необязательные параметры не будут работать в C # Xna при использовании на Xbox, но во время компиляции указывается неподдержка.

У меня есть такая ситуация:

func(float? a = null, int? b = null)

Сбольшое количество необязательных параметров thease, значение которых по умолчанию равно «undefined», null.Это необходимо.

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

func()
func(float? a)
func(int? b)
func(float? a, int? b)

Однако при большом количестве параметров это не такпрактический.

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

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

func(float? a, int? b)

Затем вызовите какИтак:

func(null, 4)

Где первое не определено.

Вместо использования одного из вышеперечисленных бодджей, есть ли способ включить необязательные параметры в C # XNA на Xbox?

Ответы [ 3 ]

3 голосов
/ 29 февраля 2012

Я бы использовал старомодные перегрузки, которые принимают разное количество параметров, и переадресовывал вызовы оттуда вместе со значениями «по умолчанию». Нулевой код изменяется для вызывающих абонентов.

Если типы находятся вне вашего контроля: методы расширения для добавления перегрузок.

2 голосов
/ 29 февраля 2012

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

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

Проверьте следующие ссылки:

http://msdn.microsoft.com/en-us/library/ff827884.aspx

http://forums.create.msdn.com/forums/p/54007/327944.aspx

1 голос
/ 29 февраля 2012

Я не думаю, что вы можете включить дополнительные параметры. Может быть, вы можете использовать альтернативу. как ключевое слово params, которое создает массив, вы можете просто передать объект в качестве параметра

public class MyParams 
{
     public float? a {get;set;}
     public int? b {get;set;}
}

func(new MyParams { b = 5 });

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

...