Csharp/C Sharp/Data Types/Nulllable

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

Declare a nullable type by adding the ? type modifier in a value type declaration.

 
using System;
public class MainClass {
    double? variable1 = null;
    static void Main() {
        int? variablea = null;
        Console.WriteLine(variablea.HasValue); // false
        int variableb = variablea ?? 5;
        Console.WriteLine(variableb); // 5
    }
}


Nullable bool Types

 
using System;
using System.Collections.Generic;
using System.Text;
class DatabaseReader {
    // Nullable data field.
    public int? numbericValue;
    public bool? boolValue = true;
    // Note the nullable return type. 
    public int? GetIntFromDatabase() { return numbericValue; }
    // Note the nullable return type. 
    public bool? GetBoolFromDatabase() { return boolValue; }
}
class Program {
    static void Main(string[] args) {
        DatabaseReader dr = new DatabaseReader();
        int? i = dr.GetIntFromDatabase();
        if (i.HasValue)
            Console.WriteLine("Value of "i" is: {0}", i);
        else
            Console.WriteLine("Value of "i" is undefined.");
        // Get bool from "database".
        bool? b = dr.GetBoolFromDatabase();
        if (b != null)
            Console.WriteLine("Value of "b" is: {0}", b);
        else
            Console.WriteLine("Value of "b" is undefined.");
        // If the value from GetIntFromDatabase() is null, 
        // assign local variable to 100.
        int? myData = dr.GetIntFromDatabase() ?? 100;
        Console.WriteLine("Value of myData: {0}", myData);
    }
}


Nullable int Types

 
using System;
using System.Collections.Generic;
using System.Text;
class DatabaseReader {
    // Nullable data field.
    public int? numbericValue;
    public bool? boolValue = true;
    // Note the nullable return type. 
    public int? GetIntFromDatabase() { return numbericValue; }
    // Note the nullable return type. 
    public bool? GetBoolFromDatabase() { return boolValue; }
}
class Program {
    static void Main(string[] args) {
        DatabaseReader dr = new DatabaseReader();
        int? i = dr.GetIntFromDatabase();
        if (i.HasValue)
            Console.WriteLine("Value of "i" is: {0}", i);
        else
            Console.WriteLine("Value of "i" is undefined.");
        // Get bool from "database".
        bool? b = dr.GetBoolFromDatabase();
        if (b != null)
            Console.WriteLine("Value of "b" is: {0}", b);
        else
            Console.WriteLine("Value of "b" is undefined.");
        // If the value from GetIntFromDatabase() is null, 
        // assign local variable to 100.
        int? myData = dr.GetIntFromDatabase() ?? 100;
        Console.WriteLine("Value of myData: {0}", myData);
    }
}


Nullable variable

 

using System;
using System.Collections.Generic;
using System.Text;
public class Vector {
    public double? R = null;
    public double? Theta = null;
    public double? ThetaRadians {
        get {
            return (Theta * Math.PI / 180.0);
        }
    }
    public Vector(double? r, double? theta) {
        if (r < 0) {
            r = -r;
            theta += 180;
        }
        theta = theta % 360;
        R = r;
        Theta = theta;
    }
    public static Vector operator +(Vector op1, Vector op2) {
        try {
            double newX = op1.R.Value * Math.Sin(op1.ThetaRadians.Value)
               + op2.R.Value * Math.Sin(op2.ThetaRadians.Value);
            double newY = op1.R.Value * Math.Cos(op1.ThetaRadians.Value)
               + op2.R.Value * Math.Cos(op2.ThetaRadians.Value);
            double newR = Math.Sqrt(newX * newX + newY * newY);
            double newTheta = Math.Atan2(newX, newY) * 180.0 / Math.PI;
            return new Vector(newR, newTheta);
        } catch {
            return new Vector(null, null);
        }
    }
    public static Vector operator -(Vector op1) {
        return new Vector(-op1.R, op1.Theta);
    }
    public static Vector operator -(Vector op1, Vector op2) {
        return op1 + (-op2);
    }
    public override string ToString() {
        string rString = R.HasValue ? R.ToString() : "null";
        string thetaString = Theta.HasValue ? Theta.ToString() : "null";
        return string.Format("({0}, {1})", rString, thetaString);
    }
}
class Program {
    public static void Main(string[] args) {
        Vector v1 = GetVector("vector1");
        Vector v2 = GetVector("vector1");
        Console.WriteLine("{0} + {1} = {2}", v1, v2, v1 + v2);
        Console.WriteLine("{0} - {1} = {2}", v1, v2, v1 - v2);
        Console.ReadKey();
    }
    public static Vector GetVector(string name) {
        Console.WriteLine("Input {0} magnitude:", name);
        double? r = GetNullableDouble();
        Console.WriteLine("Input {0} angle (in degrees):", name);
        double? theta = GetNullableDouble();
        return new Vector(r, theta);
    }
    public static double? GetNullableDouble() {
        double? result;
        string userInput = Console.ReadLine();
        try {
            result = double.Parse(userInput);
        } catch {
            result = null;
        }
        return result;
    }
}


Nulllable HasValue

 

using System;
using System.Collections.Generic;
using System.Text;

public class MyTest {
    public static void NullableTest(Nullable<int> intVal1, int intVal2) {
        if (intVal1.HasValue == true)
            Console.WriteLine(intVal1);
        else
            Console.WriteLine("Value1 is NULL");
        if (intVal2 > 0)
            Console.WriteLine(intVal2);
        else
            Console.WriteLine("Value2 is Null?");
    }
}