С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/70: Рейтинг темы: голосов - 70, средняя оценка - 4.53
0 / 0 / 0
Регистрация: 02.11.2009
Сообщений: 29
1

Присвоить значение переменной

24.04.2011, 05:56. Показов 14366. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброго времени суток.

Казалось бы тривиальная задача..

C#
1
2
3
4
5
6
7
AAA[] array = new AAA[List1.count];
array = List1.ToArray();
List2.Add(array);
 
 
array[0] = null; // если это написать, то и в List2 это значение окажется null
                     // грубо говоря мне нужно присвоить значение, а не ссылку..
как присвоить именно значение, а не ссылку, ведь при изменение array или List1, все что ссылается на них, тоже изменится...
или я вообще бред пишу?

всем заранее спасибо!
0
Лучшие ответы (1)
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Блог
24.04.2011, 05:56
Ответы с готовыми решениями:

Как присвоить значение переменной, исходя из значения другой переменной?
Всем привет. Нужна помощь. Есть переменная, например "month" которая может принимать значения...

Присвоить переменной случайное значение другой переменной
В c# нужно создать переменную, которая присваивала себе случайное значение другой переменной...

Логической переменной P присвоить значение TRUE, если N простое число, иначе значение FALSE
Логической переменной P присвоить значение TRUE, если целое N (N>1) - простое число, и значение...

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

5
Неадекват
1496 / 1233 / 247
Регистрация: 02.04.2010
Сообщений: 2,804
24.04.2011, 09:05 2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Цитата Сообщение от zombie Посмотреть сообщение
вообще бред пишу?
нет. Просто на лицо плохое знание внутренностей CLR. Чтобы создать копию экземпляра объекта - требуется использовать Clone или CopyTo в зависимости от контекста. Пример:
C#
1
2
3
4
5
List<int> t = new List<int>(){1,2,3,4,5};
            int[] t1 = new int[t.Count];
            t.CopyTo(t1);
            t1[0]=25;
            MessageBox.Show(t[0].ToString());
Что либо про ваш случай сказать не могу, пока не увижу внутренности типа AAA[].
0
0 / 0 / 0
Регистрация: 02.11.2009
Сообщений: 29
24.04.2011, 12:10  [ТС] 3
t1[0]=25;
спасибо, вот только мне надо что бы если я напишу

t[0]=999 , массив t1 не изменился, а не наоборот..


C#
1
2
3
4
5
6
       // вот если написать так, 
                    ААА[] arr = new AAA[List1.Count];
                    List1.CopyTo(arr, 0);
                    List2.Add(arr);
 
                    ААА[0].x = 6666;// list2[0].x теперь тоже равен 6666 :(
вот внутренности ААА
C#
1
2
3
4
5
6
7
8
9
10
11
        
public class ААА
{
            public double c;
            public int x;
            public int y;
            public int x2;  
            public int y2; 
            public bool bool1 = true ;
            public bool bool2 = true ;
}
Просто на лицо плохое знание внутренностей CLR
ну да, я пока только учусь
0
Неадекват
1496 / 1233 / 247
Регистрация: 02.04.2010
Сообщений: 2,804
24.04.2011, 16:16 4
В этом случае придется использовать структуру (почему? см. пункт 2):
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
using System;
using System.Collections.Generic;
 
namespace CopyList
{
    struct AAA
    {
        public double c;
        public int x;
        public int y;
        public int x2;  
        public int y2; 
        public bool bool1;
        public bool bool2;
    }
    
    class Program
    {
        public static void Main(string[] args)
        {
            AAA[] array = new AAA[4]{new AAA(), new AAA(), new AAA(), new AAA()};
            List<AAA> list1 = new List<AAA>(array);
            array[0].x=23;
            Console.WriteLine(list1[0].x);
 
            Console.Write("Press any key to continue . . . ");
            Console.ReadKey(true);
        }
    }
}
Если религия требует использовать класс, то придется переписывать ААА как индексированный класс и реализовывать метод Clone() ручками.
0
0 / 0 / 0
Регистрация: 02.11.2009
Сообщений: 29
24.04.2011, 17:04  [ТС] 5
эх, требует...

а может сразу подскажите что такое индексированный класс?
или лучше сразу у гугла спрашивать?
0
Неадекват
1496 / 1233 / 247
Регистрация: 02.04.2010
Сообщений: 2,804
24.04.2011, 17:50 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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
using System;
using System.Collections.Generic;
 
namespace CopyList
{
    class cAAA
    {
        public struct AAA
        {
            public double c;
            public int x;
            public int y;
            public int x2;  
            public int y2; 
            public bool bool1;
            public bool bool2;
        }
        
        private AAA[] array;
        
        public cAAA(int len)
        {
            if (len < 0) return;
            array = new AAA[len];
        }
        
        public AAA this[int x]
        {
            get 
            { 
                if (x < array.Length)
                    return array[x];
                else return new AAA();
            }
            
            set
            {
                if (x < array.Length)
                    array[x]=value;
            }
        }
        
        public void CopyTo(ref cAAA target)
        {
            for (int i = 0; i < this.Lenght; i++)
                target[i]=this[i];
        }
        
        public AAA[] Clone()
        {
            return array;
        }
    
        public int Lenght
        {
            get { return array.Length; }
        }
        
    }
    
    class Program
    {
        public static void Main(string[] args)
        {
            cAAA cl = new cAAA(20);
            cAAA cl1 = new cAAA(cl.Lenght);
            
            cl.CopyTo(ref cl1);
            
            cAAA.AAA dum = new cAAA.AAA();
            dum.x=10;
            cl[0]=dum;
            
            Console.WriteLine(cl1[0].x);
 
            Console.Write("Press any key to continue . . . ");
            Console.ReadKey(true);
        }
    }
    
}
Структура используется чтобы не совсем захламлять код, ее рекомендуется вынести в отдельный файл. Если struct заменить на class, то усложняться методы Clone() и CopyTo(). Вот примерный вид CopyTo в этом случае:
C#
1
2
3
4
5
6
7
8
9
for (int i = 0; i < this.Lenght; i++)
            {
                target[i].bool1=this[i].bool1;
                target[i].bool2=this[i].bool2;
                target[i].c=this[i].c;
                                //Остальные параметры
                                //[...]
 
            }
0
24.04.2011, 17:50
BasicMan
Эксперт
19315 / 2622 / 84
Регистрация: 17.02.2009
Сообщений: 10,364
Блог
24.04.2011, 17:50
Помогаю со студенческими работами здесь

Переменной t присвоить значение
Переменной t присвоить значение true, если в массиве x нет нулевых элементов, и при этом...

Присвоить значение из Словаря переменной
Здравствуйте ! С этого место объясняется как работать In-memory storage На этой старнице ...

Присвоить переменной введенное значение
Есть int i = Convert.ToInt32(Console.ReadLine()); string chislo = { i := &quot;&quot; }; Как...

Переменной t присвоить значение 1 или 0
Переменной t присвоить значение 1 или 0 в зависимости от того, можно или нет натуральное число n...

Циклы. Переменной t присвоить значение 1 или 0
Переменной t присвоить значение 1 или 0 в зависимости от того, является ли натуральное число k...

Присвоить значение переменной из другого метода
Здравствуйте! У меня возникала проблема Я создала метод, и переменной z1 необходимо присвоить...


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

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