Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
В экстазе
168 / 152 / 38
Регистрация: 05.08.2012
Сообщений: 767
Записей в блоге: 3
1

Существует ли аналог "структур" в C#

26.11.2012, 02:28. Показов 3469. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток уважаемые!

Думаю, многим из вас знакомо такое понятие, как "стуктура" из C/C++ (она же "запись" из Delphi/Pascal и т.д.). Одним из достоинства данного типа данных, была возможность практически не ограниченной манипуляции этими данными без дополнительных "костылей". То есть, эти самые структуры (и массив структур) можно было например, записывать в файл (затем считывать эти данные оттуда), отправлять в поток, загружать и хранить их в памяти и работать с ними оттуда и т.д., что было не несомненно весьма удобно.

Хотелось бы найти подобный аналог для C#, желательно без использования unmanaged-кода. В данный момент, я приспособил под данные задачи формат XML. Всё конечно работает, но не настолько удобно, как например в C++, да и кода получается в разы больше.

Уверен, многие уже сталкивались с чем-то подобным. Подскажите пожалуйста, что ещё (кроме XML), можно использовать в качестве замены структур/записей?

P.S. Так же, неоспоримым удобством, являлась возможность вычислить размер одной "строки" записи/структуры. Например, можно было посчитать, что 1 экземпляр состоящий из int + int + int, занимает 12 байт, соответственно 10 таких экземпляров, будут занимать 120 байт и т.д., чего XML-формат сделать не позволяет...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.11.2012, 02:28
Ответы с готовыми решениями:

Существует ли аналог strtol из C++
Аналог из с++ strtol существует?? Называйте темы информативно. Все Ваши темы отредактированы...

Существует ли аналог union из С++ в С#?
собственно вот и вопрос. А то стала задача сделать из двух byte один short. Пришлось парсить через...

Существует ли аналог Canvas в Qt
Здравствуйте! А есть ли в Qt компонент интерфейса для рисования наподобие Canvas, такой же по...

Существует ли ssd аналог?
Приветствую, очень сильно тормозит ноут 2014го года, а именно Sony vaio svf15n2m2rs, и я подумал...

17
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
26.11.2012, 02:31 2
http://www.developerfusion.com... ucts-in-c/
1
970 / 773 / 171
Регистрация: 12.04.2009
Сообщений: 1,700
26.11.2012, 07:51 3
каким боком тут хмл?
0
Эксперт Java
4091 / 3825 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
26.11.2012, 08:22 4
В c# есть структуры.
Цитата Сообщение от wolfalone Посмотреть сообщение
Всё конечно работает, но не настолько удобно, как например в C++, да и кода получается в разы больше.
Вы, скорее всего, что-то делаете не так.
1
В экстазе
168 / 152 / 38
Регистрация: 05.08.2012
Сообщений: 767
Записей в блоге: 3
26.11.2012, 10:20  [ТС] 5
Помогите пожалуйста с примером, как перевести структуру в массив байтов, для того, что бы записать её в поток (и считать потом её из потока, соответственно)?

По возможности, хотелось бы максимально простой пример, для "студентов". Спасибо.
0
442 / 410 / 132
Регистрация: 21.01.2012
Сообщений: 974
26.11.2012, 10:25 6
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
 
[Serializable]
public struct Student
{
    public string Name { get; set; }
}
 
class Program
{
    static void Main(string[] args)
    {
        Student st = new Student
        {
            Name = "Патрик"
        };
        BinaryFormatter formatter = new BinaryFormatter();
        using (MemoryStream stream = new MemoryStream())
        {
            formatter.Serialize(stream, st);
            byte[] bytes = stream.ToArray();
            foreach (var @byte in bytes)
                Console.Write("0x{0} ", @byte.ToString("X"));
            Console.ReadKey(true);
        }
    }
}
1
В экстазе
168 / 152 / 38
Регистрация: 05.08.2012
Сообщений: 767
Записей в блоге: 3
26.11.2012, 10:33  [ТС] 7
Всем большое спасибо, разбираюсь с примерами.

Цитата Сообщение от Konctantin Посмотреть сообщение
каким боком тут хмл?
XML - в моём случае, это 1 из способов хранения "разношерстной" информации, структурированной определённым образом.
0
Не осилил Linux
267 / 61 / 6
Регистрация: 06.08.2009
Сообщений: 223
26.11.2012, 16:13 8
wolfalone
1. Изучите такое понятие как сериализация
2. Изучите что такое struct в C#
3. Изучите сериализаторы в .NET, в том числе XmlSerializer
4. Наслаждайтесь профитом.
0
В экстазе
168 / 152 / 38
Регистрация: 05.08.2012
Сообщений: 767
Записей в блоге: 3
26.11.2012, 16:59  [ТС] 9
Цитата Сообщение от =OutlaW= Посмотреть сообщение
Изучите такое понятие как сериализация
Это понятие мне знакомо

Цитата Сообщение от =OutlaW= Посмотреть сообщение
Изучите что такое struct в C#
Всегда думал, что struct по своей сути не отличается от struct'a в C++


Цитата Сообщение от =OutlaW= Посмотреть сообщение
Изучите сериализаторы в .NET, в том числе XmlSerializer
Спасибо, изучаю

Цитата Сообщение от =OutlaW= Посмотреть сообщение
Наслаждайтесь профитом.
Уже на пол пути к наслаждению, спасибо
0
Не осилил Linux
267 / 61 / 6
Регистрация: 06.08.2009
Сообщений: 223
26.11.2012, 17:13 10
wolfalone если знакомы, то почему слово сериализация впервые появилось в моем посте, а не в заголовке темы?
для получения размера структуры - Marshal.SizeOf(typeof(MyStruct))
для сериализации в поток байтов - BinaryFormatter
1
192 / 192 / 29
Регистрация: 03.12.2009
Сообщений: 853
26.11.2012, 17:45 11
А как приравнять структуру к null подскажите,пожалуйста?
0
I ♥ C#
470 / 261 / 25
Регистрация: 07.05.2010
Сообщений: 567
26.11.2012, 17:47 12
Цитата Сообщение от wolfalone Посмотреть сообщение
Всегда думал, что struct по своей сути не отличается от struct'a в C++
.....
Цитата Сообщение от Герберт Шилдт
Любопытно, что в C++ также имеются структуры и используется ключевое слово struct. Но эти структуры отличаются от тех, что имеются в С#. Так, в C++ структура относится к типу класса, а значит, структура и класс в этом языке практически равноценны и отличаются друг от друга лишь доступом по умолчанию к их членам, которые оказываются закрытыми для класса и открытыми для структуры. А в С# структура относится к типу значения, тогда как класс — к ссылочному типу.
1
В экстазе
168 / 152 / 38
Регистрация: 05.08.2012
Сообщений: 767
Записей в блоге: 3
26.11.2012, 18:03  [ТС] 13
=OutlaW=, спасибо, изучаю!
0
I ♥ C#
470 / 261 / 25
Регистрация: 07.05.2010
Сообщений: 567
26.11.2012, 18:05 14
Цитата Сообщение от da1z Посмотреть сообщение
А как приравнять структуру к null подскажите,пожалуйста?
Никак, null могут принимать только ссылочные типы. Впрочем попробуйте почитать о Nullable<T>, возможно это то, что вам нужно.
1
192 / 192 / 29
Регистрация: 03.12.2009
Сообщений: 853
26.11.2012, 18:27 15
Цитата Сообщение от Delog Посмотреть сообщение
Никак, null могут принимать только ссылочные типы. Впрочем попробуйте почитать о Nullable<T>, возможно это то, что вам нужно.
Это то, что мне нужно , но не получается им воспользоваться. Не приведёте пример?
0
Не осилил Linux
267 / 61 / 6
Регистрация: 06.08.2009
Сообщений: 223
26.11.2012, 18:30 16
Цитата Сообщение от da1z Посмотреть сообщение
Это то, что мне нужно , но не получается им воспользоваться. Не приведёте пример?
C#
1
2
3
4
5
6
        struct MyStruct {}
        
        static void Main(string[] args)
        {
            MyStruct? myStruct = null;
        }
0
В экстазе
168 / 152 / 38
Регистрация: 05.08.2012
Сообщений: 767
Записей в блоге: 3
28.11.2012, 01:15  [ТС] 17
Подскажите пожалуйста, существует ли какая-то возможность читать структуры записанные С++ программой?

Добавлено через 22 минуты
Я имею в виду, есть некий файл, созданный программой на C++;
Заранее известно, что этот файл представляет из себя стуктуру формата:
C++
1
2
3
struct {
int a, b, c;
}
Можно как-то прочитать содержимое этого файла в C#-программе?
0
Заблокирован
28.11.2012, 02:01 18
вопрос поставлен совершенно не корректно, но рискну предположить.
Только для примера. Так писать не надо.
С++

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <fstream>
struct data
{
    int a, b, c;
};
int main()
{
    std::ofstream out("C:\\data.txt");
    data s;
    s.a = 5;
    s.b = 6;
    s.c = 9;
    out << s.a << " " << s.b << " " << s.c << std::endl;
    return 0;
}

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
using System;
using System.Text;
using System.IO;
 
namespace _121124
{
    class Program
    {
        struct data 
        {
            public int a, b, c;
            public override string ToString()
            {
                return string.Format("a: {0}; b: {1}; c: {2}", a, b, c);
            }
        }
        static void Main(string[] args)
        {
            data s = new data();
 
            using (var sr = new StreamReader(@"C:\data.txt", Encoding.GetEncoding(Encoding.ASCII.CodePage)))
            {
                var line = sr.ReadLine();
                var items = line.Split();
                s.a = int.Parse(items[0]);
                s.b = int.Parse(items[1]);
                s.c = int.Parse(items[2]);
            }
            Console.WriteLine(s);
        }
    }
}
0
28.11.2012, 02:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.11.2012, 02:01
Помогаю со студенческими работами здесь

Существует ли аналог выражению в паскале '0'.'9' в с++?
Существует ли аналог выражениям в паскале '0'..'9','a'..'z' в с++? Хочу создать функцию, которая...

Существует ли аналог ADO в Lazarus?
Имею небольшой опыт работы с базами данных *.mdb (Access-овские) в Delphi. Там я пользовался...

Существует ли в ASP аналог EVAL?
Привет All !! Может быть я повторюсь и такой вопрос уже обсуждался на форуме, но вы уж меня...

Существует ли аналог функции Eval из VB 6.0
Добрый день уважаемые друзья! Прошу вашего компетентного совета вот в каком вопросе. Работаю над...

Существует ли аналог ReoGrid на WPF
Перехожу с WinForms на WPF. Ищу аналог ReoGrid и желательно чтобы распечатывал документ.

Существует ли аналог iconv() а java
Доброго всем времени суток! Интересует, есть ли в программировании под андроид функция,...

Существует ли бесплатный аналог Adobe Dreamweaver ?
привет подскажите, есть ли бесплатный аналог этой программы?


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru