Можно ли изменить тип возвращаемого значения метода в зависимости от того, что передается в качестве параметра? [дубликаC#

Место общения программистов C#
Ответить
Anonymous
 Можно ли изменить тип возвращаемого значения метода в зависимости от того, что передается в качестве параметра? [дублика

Сообщение Anonymous »

Возможно ли, чтобы один и тот же метод имел разные типы возвращаемых значений в зависимости от того, что было передано, например, GetScripts(new Camera()) возвращал камеру, а GetScripts(new Cube()) возвращал куб? >
У меня три класса:

Код: Выделить всё

public class Script
{

}
public class Camera : Script
{

}
public class Cube : Script
{

}
У меня также есть класс GameObject, который содержит список сценариев и следующие методы:

Код: Выделить всё

public void RemoveAllSqripts()
{
Scripts.Clear();
}
public void AddScript(Script script)
{
Scripts.Add(script);
}
public Script GetScript(Type type)
{
for(int i = 0; i < Scripts.Count; i++)
{
if (Scripts[i].GetType() == type)
{
return Scripts[i];
}
}
return null;
}
У меня есть код в основной программе, который выглядит следующим образом:

Код: Выделить всё

GameObject go = new GameObject();
go.AddScript(new Camera());
go.AddScript(new Cube());
Camera camera = go.GetScript(typeof(Camera));
Строка кода: Camera camera = go.GetScript(typeof(Camera)); не работает, поскольку GetScript возвращает сценарий, а не камеру.
Можно ли изменить тип возвращаемого значения в зависимости от того, какой тип вы передаете в качестве параметра, чтобы go.GetScript(typeof(Camera)) возвращал камеру, а go.GetScript(typeof( Куб)) возвращает Cube?
Я впервые попробовал использовать дженерики (пока не совсем их понимаю) и понял, что если переписать метод GetScript() примерно так:< /p>

Код: Выделить всё

public T GetScript()
{
for (int i = 0; i < Scripts.Count; i++)
{
if (Scripts[i].GetType() == typeof(T))
{
return Scripts[i];
}
}
return default(T);
}
он ​​вернет тип, если он существует в списке. Проблема теперь в том, что return Scripts; не работает, и я не знаю, почему. Думаю, мне нужен урок о том, как работают дженерики.
Я пытался просмотреть документацию Microsoft, но это не помогло, потому что я понял только половину написанного. p>
Я благодарен за любую помощь.

Подробнее здесь: https://stackoverflow.com/questions/792 ... -passed-in
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»