私はJosh Smith's CommandSink codeを使って作業していますが、明らかにC#の "as"キーワードについて何か分かりません。シンプルキャスティングよりもC#の "as"キーワードの方が多いですか?
彼はラインを書いた理由を私は理解していない:それはケースになることはないので
IsValid = depObj != null;
_feがnullと_fce次のようになります。彼は唯一の書き込みに必要なので、
IsValid = _fe != null || _fce != null;
をnullでない、またはその逆、そうですか?あるいは、私は "as"がどのように変数をキャストするかについて何か不足していますか?
class CommonElement
{
readonly FrameworkElement _fe;
readonly FrameworkContentElement _fce;
public readonly bool IsValid;
public CommonElement(DependencyObject depObj)
{
_fe = depObj as FrameworkElement;
_fce = depObj as FrameworkContentElement;
IsValid = _fe != null || _fce != null;
}
...
ANSWER:
答えはマルクが 『と彼のコメント」の全体のポイントがある』で言っている - それはが例外をスローしません - それは単にヌルを報告します。 "
using System;
namespace TestAs234
{
class Program
{
static void Main(string[] args)
{
Customer customer = new Customer();
Employee employee = new Employee();
Person.Test(customer);
Person.Test(employee);
Console.ReadLine();
}
}
class Person
{
public static void Test(object obj)
{
Person person = obj as Customer;
if (person == null)
{
Console.WriteLine("person is null");
}
else
{
Console.WriteLine("person is of type {0}", obj.GetType());
}
}
}
class Customer : Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
class Employee : Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
}
ああ、毎日新しいことを学びます。私は似たようなことを提案しようとしていましたが、キャストできないと例外をスローすることを前提としていました。 –
@Gordon - それは "as"の全体のポイントです - 例外はスローされません。ヌルと報告する。 –