powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Не сопоставимые свойства
8 сообщений из 8, страница 1 из 1
Не сопоставимые свойства
    #39912052
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!

Есть код, который сохраняет данные как List в csv файл.
C#
Код: 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.
33.
34.
35.
36.
37.
38.
using CsvHelper;
using System;
using System.Collections.Generic;
using System.IO;

namespace Временной2
{
    class Program
    {
        public class DataСoordinate
        {
            public Int32 X { get; set; }
            public Int32 Y { get; set; }
        }

        static void Main(string[] args)
        {
            List<DataСoordinate> dataСoordinates = new List<DataСoordinate>();

            DataСoordinate dc = new DataСoordinate();
            dataСoordinates.Add(new DataСoordinate {X = 10, Y = 20});
            dataСoordinates.Add(new DataСoordinate {X = 20, Y = 40});
            dataСoordinates.Add(new DataСoordinate {X = 30, Y = 50});
            dataСoordinates.Add(new DataСoordinate {X = 40, Y = 80});

            string pathCsvFile = "C:\\Users\\Acer\\Desktop\\test.csv";

            using (StreamWriter streamReader = new StreamWriter(pathCsvFile))
            {
                using (CsvWriter csvReader = new CsvWriter(streamReader))
                {                    
                    csvReader.Configuration.Delimiter = ",";                    
                    csvReader.WriteRecords(dataСoordinates);
                }
            }
        }
    }
}

Код работает.


Если использовать struct
C#
Код: 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.
33.
34.
35.
36.
37.
38.
39.
40.
using CsvHelper;
using System;
using System.Collections.Generic;
using System.IO;

namespace Временной2
{
    class Program
    {
        public struct DataСoordinate
        {
            public Int32 X;
            public Int32 Y;

            public DataСoordinate(Int32 x, Int32 y) {
                X = x;
                Y = y;
            }
        }

        static void Main(string[] args)
        {
            List<DataСoordinate> dataСoordinates = new List<DataСoordinate>();           
            dataСoordinates.Add(new DataСoordinate(10, 20));
            dataСoordinates.Add(new DataСoordinate(20, 40));
            dataСoordinates.Add(new DataСoordinate(30, 50));
            dataСoordinates.Add(new DataСoordinate(40, 80));            

            string pathCsvFile = "C:\\Users\\Acer\\Desktop\\test.csv";
            using (StreamWriter streamReader = new StreamWriter(pathCsvFile))
            {
                using (CsvWriter csvReader = new CsvWriter(streamReader))
                {
                    csvReader.Configuration.Delimiter = ",";
                    csvReader.WriteRecords(dataСoordinates); //Ошибка
                }
            }
        }
    }
}

Возвращает ошибку:
CsvHelper.WriterException: "No properties are mapped for type 'Временной2.Program+DataСoordinate'."

Типа свойства не сопоставлены.

Скажите, где именно не сопоставлено? Как правильно написать?
...
Рейтинг: 0 / 0
Не сопоставимые свойства
    #39912057
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikk,

X и Y были свойствами (properties), а стали полями (fields)
вот и думайте
...
Рейтинг: 0 / 0
Не сопоставимые свойства
    #39912115
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не очень понятно, какой в этом смысл.
Судя по коду, вы не понимаете зачем нужны структуры, так как в вашем коде, они не нужны, от слова совсем.

Касаемо вашей проблемы:
Если вы объявляете структуру, это не значит, что все её члены должны быть низкоуровневыми, вы можете точно так же в структуре объявите свойства, которое будет скрывать в себе поля и методы доступа к ним. Как видите, правило, что свойства инкапсулирующие поля, всегда лучше, чем доступ к полям напрямую.

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

Более того, это может иметь негативный эффект, когда вы инстанцируйте (список\массив) состоящий из структур, то в куче будет выделено N памяти равной (размер массива) * (размер структуры) +/- 4-8 байт. Когда вы объявляете массив ссылочных типов, в куче будет создан массив размером (размер массив) * (размер указателя) +/- 4-8 байт, а элементы массива будут размещаться в куче отдельно. Разница в том, что объект массив в 1 случае может оказать существенно больше, чем если бы состоял из указателей на объекты, так как размер структуры может быть большим размера указателя. А значит будет помещен не в кучу, а в лох.
то есть в попытке сделать лучше, можно легко сделать хуже чем было.
...
Рейтинг: 0 / 0
Не сопоставимые свойства
    #39912131
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes,

вообще смахивает на аналог структуры Point, но в последней X и Y - это свойства
...
Рейтинг: 0 / 0
Не сопоставимые свойства
    #39912146
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes
не очень понятно, какой в этом смысл.
Судя по коду, вы не понимаете зачем нужны структуры, так как в вашем коде, они не нужны, от слова совсем.
У меня C# в процессе изучения и поэтому здесь возникают вопросы. Я пока экспериментирую с координатной графикой и для хранения точек X и Y выбрал структуру данных. Хотя изначально предполагал использовать DataTable.
...
Рейтинг: 0 / 0
Не сопоставимые свойства
    #39912155
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikk
Roman Mejtes
не очень понятно, какой в этом смысл.
Судя по коду, вы не понимаете зачем нужны структуры, так как в вашем коде, они не нужны, от слова совсем.
У меня C# в процессе изучения и поэтому здесь возникают вопросы. Я пока экспериментирую с координатной графикой и для хранения точек X и Y выбрал структуру данных. Хотя изначально предполагал использовать DataTable.

Есть уже готовая структура https://docs.microsoft.com/ru-ru/dotnet/api/system.drawing.point
Зачем понадобилось свою изобретать, не понятно.
...
Рейтинг: 0 / 0
Не сопоставимые свойства
    #39912158
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA
Есть уже готовая структура https://docs.microsoft.com/ru-ru/dotnet/api/system.drawing.point
Спасибо!
Зачем понадобилось свою изобретать, не понятно.Возможно, хранить еще дополнительные данные.
...
Рейтинг: 0 / 0
Не сопоставимые свойства
    #39912607
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikk
Roman Mejtes
не очень понятно, какой в этом смысл.
Судя по коду, вы не понимаете зачем нужны структуры, так как в вашем коде, они не нужны, от слова совсем.
У меня C# в процессе изучения и поэтому здесь возникают вопросы.

Ну так надо и искать ответы именно на вопросы, а не кидаться сразу писать код. https://www.google.com/search?q=c# value and reference types
(структура - это value type, если что).
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Не сопоставимые свойства
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]