Да, подчеркивания могут использоваться где угодно в идентификаторе. Я полагаю, что правила: любой из a-z, A-Z, _ в первом символе и тех + 0-9 для следующих символов.
префиксы Подчеркивания распространены в коде C - одинарное подчеркивание означает, что "частные", и двойные подчеркивания обычно резервируются для использования компилятором.
Оба предназначены для разных целей. Метод ToString любого объект должен возвращать строку представление этого объекта. Кастинг совсем другое, и клавиша "as" слово выполняет условное приведение, так как было сказано. Ключевое слово as в основном говорит "дайте мне ссылку на этот тип к этому объекту, если это объект этого типа "в то время как ToString говорит "получить мне строковое представление этого объекта ". Результатом может быть то же самое в некоторых случаях, но оба должны никогда не считаться взаимозаменяемыми потому что, как я уже сказал, они существуют для разные цели. Если ваше намерение это бросить, тогда вы всегда должны использовать приведение, НЕ ToString.
из http://www.codeguru.com/forum/showthread.php?t=443873
см. также http://bytes.com/groups/ net-c / 225365-tostring-string-cast
ToString () по умолчанию не выполняет преобразование. Его цель - вернуть строку, представляющую тип (например, «System.Object»).
Если вы хотите избежать приведения типов, вы можете попытаться подумать о реализации, которая строго типизирована (например, с использованием универсальных типов) и избегает DataRowObject в целом.
Для объекта данных я предлагаю вам использовать ключевое слово «as», как в следующем коде.
string name = DataRowObject["name"] as string;
Пожалуйста, проверьте его перед использованием значения.
if(name != null)
{
// statement for empty string or it has value
}
else
{
// statement for no data in this object.
}
Приведение вниз - относительно медленная операция, поскольку среда CLR должна выполнять различные проверки типов во время выполнения. Однако в этом конкретном сценарии приведение к строке
более уместно, чем вызов ToString ()
ради согласованности (вы не можете вызвать ToInt32
на ] объект
, но приведите его к int
) и поддержке.
Если вы знаете, что это Строка
, то непременно преобразуйте ее в Строку
. Приведение вашего объекта будет быстрее, чем вызов виртуального метода.
Изменить: Вот результаты некоторых тестов:
============ Casting vs. virtual method ============
cast 29.884 1.00
tos 33.734 1.13
Я использовал BenchmarkHelper
Джона Скита следующим образом:
using System;
using BenchmarkHelper;
class Program
{
static void Main()
{
Object input = "Foo";
String output = "Foo";
var results
= TestSuite.Create("Casting vs. virtual method", input, output)
.Add(cast)
.Add(tos)
.RunTests()
.ScaleByBest(ScalingMode.VaryDuration);
results.Display(ResultColumns.NameAndDuration | ResultColumns.Score,
results.FindBest());
}
static String cast(Object o)
{
return (String)o;
}
static String tos(Object o)
{
return o.ToString();
}
}
Таким образом, похоже, что приведение типов на самом деле немного быстрее, чем вызов ToString ()
.
Вот реализация String.ToString () - ничего особенного =)
public override string ToString()
{
return this;
}
В данном случае:
string name = DataRowObject["name"].ToString();
, поскольку это строка
, я думаю, что метод ToString ()
строкового объекта прост как :
return this;
так что ИМХО нет штрафа за производительность.
PS Я программист на Java, так что это только предположение.
Если вы знаете, что это String
, то непременно преобразуйте его в String
. Приведение вашего объекта будет быстрее, чем вызов виртуального метода.
Изменить: Вот результаты некоторых тестов:
============ Casting vs. virtual method ============
cast 29.884 1.00
tos 33.734 1.13
Я использовал BenchmarkHelper
Джона Скита следующим образом:
using System;
using BenchmarkHelper;
class Program
{
static void Main()
{
Object input = "Foo";
String output = "Foo";
var results
= TestSuite.Create("Casting vs. virtual method", input, output)
.Add(cast)
.Add(tos)
.RunTests()
.ScaleByBest(ScalingMode.VaryDuration);
results.Display(ResultColumns.NameAndDuration | ResultColumns.Score,
results.FindBest());
}
static String cast(Object o)
{
return (String)o;
}
static String tos(Object o)
{
return o.ToString();
}
}
Таким образом, похоже, что приведение типов на самом деле немного быстрее, чем вызов ToString ()
.
Я хочу сделать еще один комментарий
Если вы собираетесь использовать приведение: строка name = (строка) DataRowObject ["имя"] вы получите Exception: Unable to cast object of type 'System.DBNull' to type'System.String ', если запись в таблице базы данных имеет нулевое значение.
В этом сценарии вы должны использовать: имя строки = DataRowObject ["name"]. ToString () или
Вы должны проверить нулевое значение, например
if(!string.IsNullOrEmpty(DataRowObject["name"].ToString()))
{
string name = (string)DataRowObject["name"];
}
else
{
//i.e Write error to the log file
string error = "The database table has a null value";
}