Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.51/45: Рейтинг темы: голосов - 45, средняя оценка - 4.51
zombie
0 / 0 / 0
Регистрация: 02.11.2009
Сообщений: 29
1

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

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

Всем доброго времени суток.

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

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)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.04.2011, 05:56
Ответы с готовыми решениями:

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

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

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

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

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

5
freeba
Неадекват
1262 / 1061 / 202
Регистрация: 02.04.2010
Сообщений: 2,433
Записей в блоге: 2
Завершенные тесты: 2
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
zombie
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
freeba
Неадекват
1262 / 1061 / 202
Регистрация: 02.04.2010
Сообщений: 2,433
Записей в блоге: 2
Завершенные тесты: 2
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
zombie
0 / 0 / 0
Регистрация: 02.11.2009
Сообщений: 29
24.04.2011, 17:04  [ТС] 5
эх, требует...

а может сразу подскажите что такое индексированный класс?
или лучше сразу у гугла спрашивать?
0
freeba
Неадекват
1262 / 1061 / 202
Регистрация: 02.04.2010
Сообщений: 2,433
Записей в блоге: 2
Завершенные тесты: 2
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.04.2011, 17:50

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

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

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


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

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

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