С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
 Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,045
Записей в блоге: 1
.NET 4.x

Out параметр и приведение типов

08.02.2016, 19:29. Показов 1533. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть метод
C#
1
2
3
4
SomeEnum swError;
Object oldObject = .....
Object newObject = GetObject(oldObject, out swError /*можно ли сделать правильно
 приведение типов прям в out?*/);
Бывает влом писать ещё целую строчку кода для приведения типов. В частности out swError к Enum SomeError. Можно как нибудь это сделать?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.02.2016, 19:29
Ответы с готовыми решениями:

Не требуется приведение типов при умножении типов Byte
Читал тут книгу(Г. Шилдт, "Полный справочник по C#"), и нашел такое (ст. 77) Поскольку при умножении, например, 2 чисел типа byte,...

Const параметр в методе и приведение типов
Метод с константным параметром ссылкой void MyClass::MyMethod(const QString &s) { QDebug<<s; } использование метода QChar ch...

Приведение типов сырых типов
class Gen<T> { T ob Gen(T o) { ob=o; } T getob(){ return ob; } public class RawDemo {

10
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
08.02.2016, 20:01
Цитата Сообщение от skilllab Посмотреть сообщение
можно ли сделать правильно*приведение типов прям в out?
Нет.
0
 Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,045
Записей в блоге: 1
08.02.2016, 20:02  [ТС]
ну ладушки

Добавлено через 1 минуту
Чуть пропустил.
Там так:
C#
1
GetObject(Object some, out int error);
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
08.02.2016, 20:11
Лучший ответ Сообщение было отмечено skilllab как решение

Решение

Цитата Сообщение от skilllab Посмотреть сообщение
ну ладушки
Не надо нюни распускать — сделайте перегрузку
C#
1
2
3
4
5
6
7
8
9
10
11
object GetObject(object some, out SomeEnum error)
{
   int t;
   var obj = GetObject(some, out t);
   error = (SomeEnum)t;
   return obj;
}
 
SomeEnum swError;
Object oldObject = .....
Object newObject = GetObject(oldObject, out swError);
1
 Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,045
Записей в блоге: 1
08.02.2016, 20:22  [ТС]
Ах даа......
Но не получится. Там хитрые COM методы.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
08.02.2016, 20:26
Цитата Сообщение от skilllab Посмотреть сообщение
Там хитрые COM методы.
Сделайте метод-расширение:
C#
1
2
3
4
5
6
7
static class TrickyExtensions
{
   public static object GetObject(this ITrickyComObject obj, object some, out SomeEnum error)
   {
      // Здесь по накатанному.
   }
}
0
 Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,045
Записей в блоге: 1
08.02.2016, 20:28  [ТС]
Да только что и попробовал

Добавлено через 18 секунд
Ща подробней изложу что там.

Добавлено через 1 минуту
C#
1
Object safeEntity = swModel.Extension.GetObjectByPersistReference3(currentCurve, error);
Где:
IModelDoc swModel - интерфейс
ModelDocExtension Extension - свойство (get set )
GetObjectByPersistReference3 - метод
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
08.02.2016, 20:39
Цитата Сообщение от skilllab Посмотреть сообщение
swModel.Extension.GetObjectByPersistRefe rence3(currentCurve, error);
Вы out забыли прописать, так?

Цитата Сообщение от skilllab Посмотреть сообщение
IModelDoc swModel - интерфейс
ModelDocExtension Extension - свойство (get set )
GetObjectByPersistReference3 - метод
C#
1
2
3
4
5
6
7
8
9
10
11
static class ComExtensions
{
   public static object GetObjectByPersistReference3(this ModelDocExtension extension, object some, SomeEnum error)
   {
      int temp;
      var result = extension.GetObjectByPersistReference3(some, out temp);
      error = (SomeEnum)temp;
 
      return result;
   }
}
C#
1
Object safeEntity = swModel.Extension.GetObjectByPersistReference3(currentCurve, out someEnumInstance);
0
 Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,045
Записей в блоге: 1
08.02.2016, 20:43  [ТС]
И снова ахх
C#
1
2
3
4
5
6
7
8
9
10
11
 static class ComExtensions
    {
        public static object GetObjectByPersistReference3(this ModelDocExtension extension, object some, out swPersistReferencedObjectStates_e error)
        {
            int temp;
            var result = extension.GetObjectByPersistReference3(some, out temp);
            error = (swPersistReferencedObjectStates_e)temp;
 
            return result;
        }
    }
C#
1
2
swPersistReferencedObjectStates_e error;
safeEntity = ComExtensions.GetObjectByPersistReference3(swModel.Extension, currentCurve,
Вот оно))

Правда выглядит не как расширение
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
08.02.2016, 22:59
Цитата Сообщение от skilllab Посмотреть сообщение
Правда выглядит не как расширение
Это, скорее всего потому, что вы в предыдущем сообщении дали фактический тип, а не заявленный:
Цитата Сообщение от skilllab Посмотреть сообщение
ModelDocExtension Extension - свойство (get set )
Если работаете с COM, то имею серьезное подозрение, что тип свойства должен быть каким-то интерфейсом. Вот этот интерфейс и пропишите в методе-расширении, чтобы оно работало как расширение.
0
289 / 252 / 107
Регистрация: 26.10.2012
Сообщений: 802
09.02.2016, 08:37
забавно, посмотрел, а оказывается в C# и так можно делать
C#
1
2
3
4
void F<T>(out T value) where T : new()
{
      value = new T();
}
На практике правда так никогда не делал и сомневаюсь что это в принципе нормальный подход.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.02.2016, 08:37
Помогаю со студенческими работами здесь

Приведение типов
Уважаемые программеры, ПОМОГИТЕ!!! Нужно (мне) реализовать шаблонную функцию для приведения типов. Пример:...

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

Приведение типов
float y = (float) x float y = static_cast&lt;float&gt;(x) В чем разница? Что лучше и хуже? Что использовать?

Приведение типов
Добрый вечер уважаемые форумчане, подскажите, как вместо true и false сделать 1 и 0. boolean p, q; ...

Приведение типов
Ребят, здравствуйте. Срочный вопрос. Заранее очень благодарен за помощь. У меня есть свой класс в c++ builder: class Hamal : public...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru