- Регистрация
- 19.11.2010
- Сообщения
- 580
- Благодарностей
- 346
- Баллы
- 63
Доброго времени суток!
Мне и не только мне часто приходится отвечать на вопросы касающиеся "Своего кода C#" и снипетов.
Поэтому я хочу собрать основные вопросы и ответы на них в одной теме. И так:
Вопрос №1: Когда действие "Свой код C#" выходит по плохому выходу и как его можно генерировать?
Плохой выход в коде возникает в случаи exception (то есть в результате ошибки во время выполнения кода). К примеру:
Средства .Net позволяют генерировать исключения через следующий код:
где "Плохой выход" - текст указанный пользователем. Так же есть и специализированные исключения, к примеру:
Подробности на http://msdn.microsoft.com/ (http://msdn.microsoft.com/ru-ru/library/System.Exception.aspx)
Вопрос №2: Почему присвоение значения переменной проекта вызывает ошибку?
Переменные проекты такие как {-Variable.var-} в коде доступны в следующем виде и имеет строковое (текстовое) значения:
C# - язык строго типизированный поэтому нужно приводить типы. Для этого в .Net есть специальный класс Convert(http://msdn.microsoft.com/ru-ru/library/system.convert.aspx),
который может привести любой простой тип (такие как int, double, float, string, ...) в любой другой простой тип. К примеру есть {-Variable.var-} = "3" то:
обратный перевод:
Любой объект (объект класса или переменная) содержит метод ToString() который работает так же как Convert.ToString(Type).
Однако этот перевод возможен только с простыми типами.
При использовании return преобразование в строковое значение не обязательно.
Вопрос №3: Возможно ли создание переменой, списка или таблиц в проекте из кода?
Нет.
Вопрос №4: Я скопировал код из интернета, а он не работает. Почему?
Не любой код на C# будет работать в "Свой код C#". Общей методики перевода нет. Но можно кое что посоветовать:
1) Код C# файла работать не будет. К примеру:
Однако вот такой будет:
То есть "C# код" выполняет только тело метода.
2) Если требуется передать какие то параметры в свой код или же получить из кода, то можно использовать переменные проекта и получать через project.Variables (так же вернуть значение можно через return).
3) Если вы скопировали кусок кода которые должен работать, но во время компиляции ошибка что то вроде "Не удалось найти что то. Возможно отсутствует ссылка на сборку":
Первое проверьте пространства имен. К примеру код:
должен быть таким
Второе подключите все необходимые сборки через блок "Ссылки из GAC".
Если не знаете пространство имен класса или сборку (и если класс из стандартных средств .Net), то можно поступить следующим образом:
В поиске google (или любой другой поисковик) указать название класса и в ссылке на msdn перейти на страницу, а в описании класса указана вся информация.
К нашему примеру:
Пространство имен: System.IO
Сборка: mscorlib (в mscorlib.dll)
Мне и не только мне часто приходится отвечать на вопросы касающиеся "Своего кода C#" и снипетов.
Поэтому я хочу собрать основные вопросы и ответы на них в одной теме. И так:
Вопрос №1: Когда действие "Свой код C#" выходит по плохому выходу и как его можно генерировать?
Плохой выход в коде возникает в случаи exception (то есть в результате ошибки во время выполнения кода). К примеру:
JavaScript:
// объявим объект
Random rnd = null;
// попробуем вызвать методы
int a = rnd.Next(100);
// и получим NullReferenceException т.е. Ссылка на объект не указывает на экземпляр объекта.
JavaScript:
throw new System.Exception("Плохой выход");
JavaScript:
throw new System.NullReferenceException("Объект не создан");
Вопрос №2: Почему присвоение значения переменной проекта вызывает ошибку?
Переменные проекты такие как {-Variable.var-} в коде доступны в следующем виде и имеет строковое (текстовое) значения:
JavaScript:
string str = project.Variables["var"].Value;
который может привести любой простой тип (такие как int, double, float, string, ...) в любой другой простой тип. К примеру есть {-Variable.var-} = "3" то:
JavaScript:
int a = Convert.ToInt32(project.Variables["var"].Value);
JavaScript:
int a = 3;
// так
project.Variables["var"].Value = Convert.ToString(a);
// или так
project.Variables["var"].Value = a.ToString();
Однако этот перевод возможен только с простыми типами.
При использовании return преобразование в строковое значение не обязательно.
Вопрос №3: Возможно ли создание переменой, списка или таблиц в проекте из кода?
Нет.
Вопрос №4: Я скопировал код из интернета, а он не работает. Почему?
Не любой код на C# будет работать в "Свой код C#". Общей методики перевода нет. Но можно кое что посоветовать:
1) Код C# файла работать не будет. К примеру:
JavaScript:
using System;
public class Person
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
public override int GetHashCode()
{
return this.Name.GetHashCode();
}
public override bool Equals(object obj)
{
// This implementation handles a null obj argument.
Person p = obj as Person;
if (p == null)
return false;
else
return this.Name.Equals(p.Name);
}
}
public class Example
{
public static void Method()
{
Person p1 = new Person();
p1.Name = "John";
Person p2 = null;
Console.WriteLine("p1 = p2: {0}", p1.Equals(p2));
}
}
JavaScript:
ulong[] numbers = { UInt64.MinValue, 6121, 403890774, UInt64.MaxValue };
bool result;
var list = new List<string>();
foreach (ulong number in numbers)
{
result = Convert.ToBoolean(number);
list.Add(String.Format("{0,-26:N0} --> {1}", number, result));
}
2) Если требуется передать какие то параметры в свой код или же получить из кода, то можно использовать переменные проекта и получать через project.Variables (так же вернуть значение можно через return).
3) Если вы скопировали кусок кода которые должен работать, но во время компиляции ошибка что то вроде "Не удалось найти что то. Возможно отсутствует ссылка на сборку":
Первое проверьте пространства имен. К примеру код:
JavaScript:
var stream = new StreamReader(path);
JavaScript:
var stream = new System.IO.StreamReader(path);
Если не знаете пространство имен класса или сборку (и если класс из стандартных средств .Net), то можно поступить следующим образом:
В поиске google (или любой другой поисковик) указать название класса и в ссылке на msdn перейти на страницу, а в описании класса указана вся информация.
К нашему примеру:
Пространство имен: System.IO
Сборка: mscorlib (в mscorlib.dll)