Как передать null в out параметр ? (и возможно ли это ?)
От: Аноним  
Дата: 11.08.09 10:32
Оценка:
У меня есть некоторые функции Foo1 и Foo2:

class A
{
public void Foo1(out int x){ /* ... */ }

public void Foo2(out A a) { /* ... */ }
}


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

Я пытался на место out параметра поставить null, но компилятор ругается: Cannot convert '<null>' to ...


Как обойти ?
Re: Как передать null в out параметр ? (и возможно ли это ?
От: _FRED_ Черногория
Дата: 11.08.09 10:38
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Так вот, возвращаемые через out параметры я получать не хочу. Также не хочу объявлять специально для этого переменные, чтобы получать ненужные мне параметры.

А>class A
А>{
А>  public void Foo1(out int x){ /* ... */ }
А>  public void Foo2(out A a) { /* ... */ }
А>}

А>Я пытался на место out параметра поставить null, но компилятор ругается: Cannot convert '<null>' to ...
А>Как обойти ?

Никак. Заводить dummy-переменные и передавать их:
A a = /**/;

int dummy;
a.Foo1(out dummy);

A unused;
a.Foo2(out unused);
Help will always be given at Hogwarts to those who ask for it.
Re[2]: Как передать null в out параметр ? (и возможно ли эт
От: Аноним  
Дата: 11.08.09 10:48
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>Никак. Заводить dummy-переменные и передавать их:


Обидно.

Возможно, Microsoft исправит это в следующей версии .NET
Re[3]: Как передать null в out параметр ? (и возможно ли эт
От: _FRED_ Черногория
Дата: 11.08.09 10:53
Оценка: :))) :))) :))
Здравствуйте, Аноним, Вы писали:

_FR>>Никак. Заводить dummy-переменные и передавать их:


А> Обидно.


А>Возможно, Microsoft исправит это в следующей версии .NET


Обязательно.
Help will always be given at Hogwarts to those who ask for it.
Re: Как передать null в out параметр ? (и возможно ли это ?
От: Lloyd Россия  
Дата: 11.08.09 10:53
Оценка: 17 (3) +2
Здравствуйте, Аноним, Вы писали:

А>Я пытался на место out параметра поставить null, но компилятор ругается: Cannot convert '<null>' to ...



А>Как обойти ?


public static AExtensions {
    public static void Foo1(this A a) {
        int x;
        a.Foo1(out x);
    }
    public static void Foo2(this A a) {
        A x;
        a.Foo2(out x);
    }
}
Re[3]: Как передать null в out параметр ? (и возможно ли эт
От: mrjeka Россия  
Дата: 11.08.09 14:17
Оценка: :)
Здравствуйте, Аноним, Вы писали:

А>Возможно, Microsoft исправит это в следующей версии .NET

Что за бред Вы несете? out для того и сделан, что в метод можно передавать не инициализированные объекты. В методе они должны быть проинициализированы.
Если Вам не требуется именно этот функционал, может стоит задуматься о необходимости этого параметра?
Re[4]: Как передать null в out параметр ? (и возможно ли эт
От: Ellin Россия www.rsdn.ru
Дата: 11.08.09 14:19
Оценка:
Здравствуйте, mrjeka, Вы писали:

M>Здравствуйте, Аноним, Вы писали:


А>>Возможно, Microsoft исправит это в следующей версии .NET

M>Что за бред Вы несете? out для того и сделан, что в метод можно передавать не инициализированные объекты. В методе они должны быть проинициализированы.
M>Если Вам не требуется именно этот функционал, может стоит задуматься о необходимости этого параметра?
Хотел бы я посмотреть на выражение вашего лица, когда MS это исправит.
Re[4]: Как передать null в out параметр ? (и возможно ли эт
От: Lloyd Россия  
Дата: 11.08.09 14:30
Оценка:
Здравствуйте, mrjeka, Вы писали:

А>>Возможно, Microsoft исправит это в следующей версии .NET

M>Что за бред Вы несете? out для того и сделан, что в метод можно передавать не инициализированные объекты. В методе они должны быть проинициализированы.

Они вроде как уже что-то похожее реализовали для работы с COM-овскими ref-параметрами.
Re[5]: Как передать null в out параметр ? (и возможно ли эт
От: mrjeka Россия  
Дата: 11.08.09 14:57
Оценка:
Здравствуйте, Ellin, Вы писали:

E>Хотел бы я посмотреть на выражение вашего лица, когда MS это исправит.


Я просто плохо представляю ситуацию, когда есть необходимость в метод передавать null по out.
Re[6]: Как передать null в out параметр ? (и возможно ли эт
От: Lloyd Россия  
Дата: 11.08.09 15:00
Оценка: +1
Здравствуйте, mrjeka, Вы писали:

E>>Хотел бы я посмотреть на выражение вашего лица, когда MS это исправит.


M>Я просто плохо представляю ситуацию, когда есть необходимость в метод передавать null по out.


А null и не надо передавать. Просто компилятор мог бы сгенерить локальную переменную и передавать ее адрес.
Re[7]: Как передать null в out параметр ? (и возможно ли эт
От: mrjeka Россия  
Дата: 11.08.09 15:26
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, mrjeka, Вы писали:


E>>>Хотел бы я посмотреть на выражение вашего лица, когда MS это исправит.


Я бы на всех лица посмотрел, если MS это исправит. И аргументы интересно было бы услышать.

M>>Я просто плохо представляю ситуацию, когда есть необходимость в метод передавать null по out.


L>А null и не надо передавать. Просто компилятор мог бы сгенерить локальную переменную и передавать ее адрес.




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

Я пытался на место out параметра поставить null, но компилятор ругается: Cannot convert '<null>' to ...


Вопрос, зачем тогда в методе этот параметр передается через out? Если это метод сторонней библиотеки и исправить это нельзя, то пишите обертки этих методов.
Re[2]: Как передать null в out параметр ? (и возможно ли эт
От: mrjeka Россия  
Дата: 11.08.09 15:30
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>
L>public static AExtensions {
L>    public static void Foo1(this A a) {
L>        int x;
L>        a.Foo1(out x);
L>    }
L>    public static void Foo2(this A a) {
L>        A x;
L>        a.Foo2(out x);
L>    }
L>}
L>


Я извиняюсь , но приведите пример использования этого.
Re[3]: Как передать null в out параметр ? (и возможно ли эт
От: QrystaL Украина  
Дата: 11.08.09 18:17
Оценка:
M>Я извиняюсь , но приведите пример использования этого.

Там должно быть так:

public static class AExtensions {
    public static void Foo1(this A a) {
        int x;
        a.Foo1(out x);
    }
    public static void Foo2(this A a) {
        A x;
        a.Foo2(out x);
    }
}
Re[3]: Как передать null в out параметр ? (и возможно ли эт
От: midcyber
Дата: 11.08.09 19:18
Оценка:
Здравствуйте, mrjeka, Вы писали:

M>Я извиняюсь :shuffle: , но приведите пример использования этого.


Так:
a.Foo1();
a.Foo2();


Можно и обертку, возвращающую значение, если создание объекта A кушать много не просит
public static A Foo2(this A a) 
{
  A x = default(A);
  a.Foo2(out x);
  return x;
}
Re[4]: Как передать null в out параметр ? (и возможно ли эт
От: Аноним  
Дата: 11.08.09 22:07
Оценка:
Здравствуйте, midcyber, Вы писали:

M>Здравствуйте, mrjeka, Вы писали:


M>>Я извиняюсь , но приведите пример использования этого.


M>Так:

M>
M>a.Foo1(); //Это вызов
M>a.Foo2();
M>


class A
{
public void Foo1(out int x){ /* ... */ }

public void Foo2(out A a) { /* ... */ }
}

Вот так было. Топикастер не желает создавать объекты А за ненабностью их использования.
И что получили?


public static class AExtensions {
    public static void Foo1(this A a) {
        int x;
        a.Foo1(out x);//Требуется объяление метода Foo1 в классе А
    }
    public static void Foo2(this A a) {
        A x;
        a.Foo2(out x);//Требуется объяление метода Foo2 в классе А
    }
}



И даже если там поправить чтобы работало
Создали объект, который создавать не хотелось и вызвали расширеный метод


a.Foo1();
a.Foo2();



И что выиграли?
Re[5]: Как передать null в out параметр ? (и возможно ли эт
От: samius Япония http://sams-tricks.blogspot.com
Дата: 11.08.09 22:18
Оценка:
Здравствуйте, Аноним, Вы писали:

А>
А>class A
А>{
А>public void Foo1(out int x){ /* ... */ }

А>public void Foo2(out A a) { /* ... */ }
А>}
А>

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

А>И что получили?


А>
А>public static class AExtensions {
А>    public static void Foo2(this A a) {
А>        A x;
А>        a.Foo2(out x);//Требуется объяление метода Foo2 в классе А
А>    }
А>}
А>


А>И даже если там поправить чтобы работало

А>Создали объект, который создавать не хотелось и вызвали расширеный метод
Где конкретно создали объект? Выделенное выражение не создает объект, а только объявляет переменную типа A.

А>
А>a.Foo1();
А>a.Foo2();
А>


А>И что выиграли?

Выиграли то, что просил топикстартер. Напоминаю, он не хотел объявлять лишние переменные при вызове методов с out параметрами.
Re[6]: Как передать null в out параметр ? (и возможно ли эт
От: Аноним  
Дата: 12.08.09 04:47
Оценка:
Здравствуйте, samius, Вы писали:


public static class AExtensions {
    public static void Foo2(this A a) {
        A x;
        a.Foo2(out x);//Требуется объяление метода Foo2 в классе А
    }
}


Метод Foo2 есть как расширенный так и в классе А.
Когда Вы пишете a.Foo2() то какой метод вызывается?

a.Foo1();
a.Foo2();


А>>И что выиграли?

S>Выиграли то, что просил топикстартер. Напоминаю, он не хотел объявлять лишние переменные при вызове методов с out параметрами.

Не проще написать Foo1() и Foo2() без параметров в классе А?
Re[7]: Как передать null в out параметр ? (и возможно ли эт
От: mrjeka Россия  
Дата: 12.08.09 06:08
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, samius, Вы писали:


А>Метод Foo2 есть как расширенный так и в классе А.

А>Когда Вы пишете a.Foo2() то какой метод вызывается?

Метод класса A отличается от extension сигнатурой.

А>Не проще написать Foo1() и Foo2() без параметров в классе А?

С этим вполне согласен.
Re[4]: Как передать null в out параметр ? (и возможно ли эт
От: Аноним  
Дата: 12.08.09 06:37
Оценка:
Здравствуйте, mrjeka, Вы писали:

M>Что за бред Вы несете? out для того и сделан, что в метод можно передавать не инициализированные объекты. В методе они должны быть проинициализированы.


Ну не совсем так: out сделаны, чтобы функция могла возвращать более, чем 1 параметр, скажем так 3-4, причем возможно разных типов.

M>Если Вам не требуется именно этот функционал, может стоит задуматься о необходимости этого параметра?


У меня есть либа, которую я не могу править. Там куча функций, у которых 3-4 out-параметра, которыми я никаким боком после вызова фунции не пользуюсь. Мне что, каждый раз объявлять 3-4 ненужные переменные, которые я потом все равно не буду использовать ?

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

Возможно, в последующих версиях Microsoft что-то изменит ...
Re: Как передать null в out параметр ? (и возможно ли это ?
От: vodolas  
Дата: 12.08.09 07:38
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>У меня есть некоторые функции Foo1 и Foo2:


А>
А>class A
А>{
А>public void Foo1(out int x){ /* ... */ }

А>public void Foo2(out A a) { /* ... */ }
А>}
А>


А>Я пытался на место out параметра поставить null, но компилятор ругается: Cannot convert '<null>' to ...

Может тогда стоит, как и говори более опытные собратья, просто написать обертку, которая будет иметь вид:

class A
{
  public void Foo1(out int x){ /* ... */ }
  public void Foo2(out A a) { /* ... */ }
  public void SuperFoo2() 
  { 
     A dummy;
     Foo2(dummy);
  }
}

Теперь для вызова Foo2 можно не использовать параметров ваще, вызвав SuperFoo2
Насколько я понимаю, это и требовалось топикстартеру
А>Как обойти ?
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.