Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
chaleureux
18 / 21 / 19
Регистрация: 24.12.2014
Сообщений: 1,002
1

Как организовать конвертирование в отдельном классе?

23.05.2017, 23:44. Просмотров 797. Ответов 3
Метки нет (Все метки)

По шапке, имеется такой код:
C#
1
2
3
4
5
6
7
8
9
foreach (var queryObj in Getmem)
{
   double dblMemory;
   if (double.TryParse(Convert.ToString(queryObj["TotalPhysicalMemory"]), out dblMemory))
   {
       strbuild.AppendFormat("Физической памяти: {0} MB ", Convert.ToInt32(dblMemory / (1024 * 1024)));
       strbuild.AppendFormat("({0} GB)", Convert.ToInt32(dblMemory / (1024 * 1024 * 1024)));
   }
}
Подскажите как перетащить конвертирование в другой класс, и оттуда вызывать уже в основном?
Вот эти строчки нужно переместить:
C#
1
2
3
double dblMemory;
double.TryParse(Convert.ToString(queryObj["TotalPhysicalMemory"]), out dblMemory)
Convert.ToInt32(dblMemory / (1024 * 1024 * 1024))
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.05.2017, 23:44
Ответы с готовыми решениями:

Как организовать индексатор в абстрактном классе?
1. Есть абстрактный класс сущности Entity.cs public abstract class Entity ...

Создать объект Graphics в отдельном классе
Можно ли создать объект Graphics в отдельном классе, без привязки к форме?

Реализованы ли в коде объявление и инициализация в отдельном классе
Приветствую, гуру кода! Есть такой код class Point { ...

Реализовать Интерфейс, включающий три метода, каждый из которых реализован в отдельном классе
подскажите пожалуйста можно ли реализовать Интерфейс , который будет содержать...

Как использовать объект класса, созданого в определеном классе, в другом классе
У меня такой вопрос,как использовать объект класса,созданого в определеном...

3
Someone007
2434 / 1910 / 871
Регистрация: 09.05.2015
Сообщений: 4,722
Завершенные тесты: 1
24.05.2017, 02:58 2
Лучший ответ Сообщение было отмечено chaleureux как решение

Решение

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
            ManagementObjectSearcher searcher =
                                new ManagementObjectSearcher("root\\CIMV2",
                                "SELECT TotalPhysicalMemory FROM Win32_ComputerSystem");
 
            foreach (ManagementObject queryObj in searcher.Get())
            {
                double dblMemory;
                if (queryObj.Convert("TotalPhysicalMemory", out dblMemory))
                {
                    Console.WriteLine("TotalPhysicalMemory is: {0} MB", dblMemory.ToMB());
                    Console.WriteLine("TotalPhysicalMemory is: {0} GB", dblMemory.ToGB());
                }
            }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    static class Extensions
    {
        public static bool Convert(this ManagementObject obj, string property, out double value)
        {
            return double.TryParse(obj[property].ToString(), out value);
        }
 
        public static int ToMB(this double value)
        {
            return (int)(value / (1024 * 1024));
        }
 
        public static int ToGB(this double value)
        {
            return (int)(value / (1024 * 1024 * 1024));
        }
    }
1
chaleureux
18 / 21 / 19
Регистрация: 24.12.2014
Сообщений: 1,002
25.05.2017, 08:51  [ТС] 3
Есть подобное, тоже нужно выделить через другой класс, я так полагаю там смысл тот же что и выше?
C#
1
2
3
4
5
6
7
8
9
10
11
12
ManagementObjectCollection GetVideo = VideoControl.Get();
            foreach (ManagementObject w in GetVideo)
            {
                string container;
                int int1024 = 1048576;
                if ((Convert.ToDouble(w["AdapterRam"]) / int1024) % 1024 == 0)
                    container = ((Convert.ToDouble(w["AdapterRam"]) / int1024) / 1024).ToString() + " ГБ";
                else
                    container = (Convert.ToDouble(w["AdapterRam"]) / int1024).ToString() + " МБ";
                if (w["Caption"] != null)
                        InfoWrite.AppendFormat("Ваша Видеокарта: {0}  :  {1}", w["Caption"], container);
            }
Добавлено через 31 минуту
Кстать по предыдущему примеру, у меня теперь выводится не 8 ГБ памяти а 7 С чем это связано?

Добавлено через 22 часа 52 минуты
Someone007, Если есть возможность посмотрите что не так)
0
Rius
Эксперт .NET
5131 / 3351 / 820
Регистрация: 25.05.2015
Сообщений: 10,294
Записей в блоге: 11
Завершенные тесты: 4
25.05.2017, 10:11 4
Цитата Сообщение от chaleureux Посмотреть сообщение
Кстать по предыдущему примеру, у меня теперь выводится не 8 ГБ памяти а 7 С чем это связано?
Объём возвращается не физически установленный:
Код
TotalPhysicalMemory is: 17 064 132 608 B
TotalPhysicalMemory is: 16 273 MB
TotalPhysicalMemory is: 15 GB
А на самом деле 16 GB = 17 179 869 184 B.
Поэтому при целочисленном делении дробная часть игнорируется, а целая - меньше.

Добавлено через 51 минуту
Total size of physical memory. Be aware that, under some circumstances, this property may not return an accurate value for the physical memory. For example, it is not accurate if the BIOS is using some of the physical memory. For an accurate value, use the Capacity property in Win32_PhysicalMemory instead.
Таким кодом можете узнать побольше об установленной фактически памяти и вытащить нужную инфу:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ManagementObjectSearcher searcher =
        new ManagementObjectSearcher("root\\CIMV2",
        //"SELECT * FROM Win32_ComputerSystem"
        "SELECT * from Win32_PhysicalMemory"
        );
 
foreach (ManagementObject queryObj in searcher.Get())
{
    var computer = queryObj;
 
    foreach (var item in computer.Properties)
    {
        Console.WriteLine("{0} =\n    {1}", item.Name, item.Value);
    }
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.05.2017, 10:11

Как использовать информацию парсированую в 1 классе в другом классе
имеются 2 класса , объясните плз в чём ошибка using System; using...

Как десериализовать в отдельном потоке ?
Метод MessageReceiverFirst принимает сокет и потом в отдельном потоке...

Как запустить форму в отдельном потоке
Как запустить форму в отдельный поток.


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru