Fix nullability warnings (samples/snippets/standard) (#35190)
This commit is contained in:
Родитель
20f4c58e05
Коммит
1097bb053b
|
@ -12,9 +12,9 @@ namespace complex
|
|||
_resolver = new AssemblyDependencyResolver(mainAssemblyToLoadPath);
|
||||
}
|
||||
|
||||
protected override Assembly Load(AssemblyName name)
|
||||
protected override Assembly? Load(AssemblyName name)
|
||||
{
|
||||
string assemblyPath = _resolver.ResolveAssemblyToPath(name);
|
||||
string? assemblyPath = _resolver.ResolveAssemblyToPath(name);
|
||||
if (assemblyPath != null)
|
||||
{
|
||||
return LoadFromAssemblyPath(assemblyPath);
|
||||
|
|
|
@ -12,7 +12,7 @@ namespace simple
|
|||
{
|
||||
}
|
||||
|
||||
protected override Assembly Load(AssemblyName name)
|
||||
protected override Assembly? Load(AssemblyName name)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
@ -23,7 +23,7 @@ namespace simple
|
|||
{
|
||||
// <Snippet2>
|
||||
[MethodImpl(MethodImplOptions.NoInlining)]
|
||||
static int ExecuteAndUnload(string assemblyPath, out WeakReference alcWeakRef)
|
||||
static void ExecuteAndUnload(string assemblyPath, out WeakReference alcWeakRef)
|
||||
{
|
||||
// <Snippet3>
|
||||
var alc = new TestAssemblyLoadContext();
|
||||
|
@ -34,14 +34,12 @@ namespace simple
|
|||
|
||||
// <Snippet4>
|
||||
var args = new object[1] {new string[] {"Hello"}};
|
||||
int result = (int) a.EntryPoint.Invoke(null, args);
|
||||
_ = a.EntryPoint?.Invoke(null, args);
|
||||
// </Snippet4>
|
||||
|
||||
// <Snippet5>
|
||||
alc.Unload();
|
||||
// </Snippet5>
|
||||
|
||||
return result;
|
||||
}
|
||||
// </Snippet2>
|
||||
|
||||
|
@ -49,7 +47,7 @@ namespace simple
|
|||
{
|
||||
// <Snippet6>
|
||||
WeakReference testAlcWeakRef;
|
||||
int result = ExecuteAndUnload("absolute/path/to/your/assembly", out testAlcWeakRef);
|
||||
ExecuteAndUnload("absolute/path/to/your/assembly", out testAlcWeakRef);
|
||||
// </Snippet6>
|
||||
|
||||
// <Snippet7>
|
||||
|
|
|
@ -10,7 +10,7 @@ namespace example
|
|||
public TestAssemblyLoadContext() : base(true)
|
||||
{
|
||||
}
|
||||
protected override Assembly Load(AssemblyName name)
|
||||
protected override Assembly? Load(AssemblyName name)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
@ -18,19 +18,20 @@ namespace example
|
|||
|
||||
class TestInfo
|
||||
{
|
||||
public TestInfo(MethodInfo mi)
|
||||
public TestInfo(MethodInfo? mi)
|
||||
{
|
||||
entryPoint = mi;
|
||||
_entryPoint = mi;
|
||||
}
|
||||
MethodInfo entryPoint;
|
||||
|
||||
MethodInfo? _entryPoint;
|
||||
}
|
||||
|
||||
class Program
|
||||
{
|
||||
static TestInfo entryPoint;
|
||||
static TestInfo? entryPoint;
|
||||
|
||||
[MethodImpl(MethodImplOptions.NoInlining)]
|
||||
static int ExecuteAndUnload(string assemblyPath, out WeakReference testAlcWeakRef, out MethodInfo testEntryPoint)
|
||||
static int ExecuteAndUnload(string assemblyPath, out WeakReference testAlcWeakRef, out MethodInfo? testEntryPoint)
|
||||
{
|
||||
var alc = new TestAssemblyLoadContext();
|
||||
testAlcWeakRef = new WeakReference(alc);
|
||||
|
@ -45,21 +46,21 @@ namespace example
|
|||
|
||||
var args = new object[1] {new string[] {"Hello"}};
|
||||
|
||||
// Issue preventing unloading #1 - we keep MethodInfo of a method for an assembly loaded into the TestAssemblyLoadContext in a static variable
|
||||
// Issue preventing unloading #1 - we keep MethodInfo of a method
|
||||
// for an assembly loaded into the TestAssemblyLoadContext in a static variable.
|
||||
entryPoint = new TestInfo(a.EntryPoint);
|
||||
testEntryPoint = a.EntryPoint;
|
||||
|
||||
int result = (int)a.EntryPoint.Invoke(null, args);
|
||||
var oResult = a.EntryPoint?.Invoke(null, args);
|
||||
alc.Unload();
|
||||
|
||||
return result;
|
||||
return (oResult is int result) ? result : -1;
|
||||
}
|
||||
|
||||
static void Main(string[] args)
|
||||
{
|
||||
WeakReference testAlcWeakRef;
|
||||
// Issue preventing unloading #2 - we keep MethodInfo of a method for an assembly loaded into the TestAssemblyLoadContext in a local variable
|
||||
MethodInfo testEntryPoint;
|
||||
MethodInfo? testEntryPoint;
|
||||
int result = ExecuteAndUnload(@"absolute/path/to/test.dll", out testAlcWeakRef, out testEntryPoint);
|
||||
|
||||
for (int i = 0; testAlcWeakRef.IsAlive && (i < 10); i++)
|
||||
|
|
|
@ -6,7 +6,6 @@ namespace test
|
|||
{
|
||||
class Test
|
||||
{
|
||||
string message = "Hello";
|
||||
}
|
||||
|
||||
class Program
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<StartupObject>test.Program</StartupObject>
|
||||
</PropertyGroup>
|
||||
|
||||
|
|
|
@ -8,17 +8,25 @@ class Example
|
|||
using (IMemoryOwner<char> owner = MemoryPool<char>.Shared.Rent())
|
||||
{
|
||||
Console.Write("Enter a number: ");
|
||||
try {
|
||||
var value = Int32.Parse(Console.ReadLine());
|
||||
try
|
||||
{
|
||||
string? s = Console.ReadLine();
|
||||
|
||||
if (s is null)
|
||||
return;
|
||||
|
||||
var value = Int32.Parse(s);
|
||||
|
||||
var memory = owner.Memory;
|
||||
WriteInt32ToBuffer(value, memory);
|
||||
DisplayBufferToConsole(memory.Slice(0, value.ToString().Length));
|
||||
}
|
||||
catch (FormatException) {
|
||||
catch (FormatException)
|
||||
{
|
||||
Console.WriteLine("You did not enter a valid number.");
|
||||
}
|
||||
catch (OverflowException) {
|
||||
catch (OverflowException)
|
||||
{
|
||||
Console.WriteLine($"You entered a number less than {Int32.MinValue:N0} or greater than {Int32.MaxValue:N0}.");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<RootNamespace>Visual_Studio_Projects</RootNamespace>
|
||||
</PropertyGroup>
|
||||
|
||||
|
|
|
@ -8,8 +8,14 @@ class Example
|
|||
IMemoryOwner<char> owner = MemoryPool<char>.Shared.Rent();
|
||||
|
||||
Console.Write("Enter a number: ");
|
||||
try {
|
||||
var value = Int32.Parse(Console.ReadLine());
|
||||
try
|
||||
{
|
||||
string? s = Console.ReadLine();
|
||||
|
||||
if (s is null)
|
||||
return;
|
||||
|
||||
var value = Int32.Parse(s);
|
||||
|
||||
var memory = owner.Memory;
|
||||
|
||||
|
@ -17,13 +23,16 @@ class Example
|
|||
|
||||
DisplayBufferToConsole(owner.Memory.Slice(0, value.ToString().Length));
|
||||
}
|
||||
catch (FormatException) {
|
||||
catch (FormatException)
|
||||
{
|
||||
Console.WriteLine("You did not enter a valid number.");
|
||||
}
|
||||
catch (OverflowException) {
|
||||
catch (OverflowException)
|
||||
{
|
||||
Console.WriteLine($"You entered a number less than {Int32.MinValue:N0} or greater than {Int32.MaxValue:N0}.");
|
||||
}
|
||||
finally {
|
||||
finally
|
||||
{
|
||||
owner?.Dispose();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<RootNamespace>Visual_Studio_Projects</RootNamespace>
|
||||
</PropertyGroup>
|
||||
|
||||
|
|
|
@ -7,7 +7,12 @@ class Example
|
|||
Memory<char> memory = new char[64];
|
||||
|
||||
Console.Write("Enter a number: ");
|
||||
var value = Int32.Parse(Console.ReadLine());
|
||||
string? s = Console.ReadLine();
|
||||
|
||||
if (s is null)
|
||||
return;
|
||||
|
||||
var value = Int32.Parse(s);
|
||||
|
||||
WriteInt32ToBuffer(value, memory);
|
||||
DisplayBufferToConsole(memory);
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<RootNamespace>Visual_Studio_Projects</RootNamespace>
|
||||
</PropertyGroup>
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net7.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<RootNamespace>task_returning_async</RootNamespace>
|
||||
</PropertyGroup>
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
using System;
|
||||
using System;
|
||||
using System.Buffers;
|
||||
using System.IO;
|
||||
using System.Threading.Tasks;
|
||||
|
@ -28,7 +28,12 @@ public class Example
|
|||
var span = memory.Span;
|
||||
while (true)
|
||||
{
|
||||
int value = Int32.Parse(Console.ReadLine());
|
||||
string? s = Console.ReadLine();
|
||||
|
||||
if (s is null)
|
||||
return;
|
||||
|
||||
int value = Int32.Parse(s);
|
||||
if (value < 0)
|
||||
return;
|
||||
|
||||
|
|
|
@ -11,7 +11,8 @@ public class Example
|
|||
{
|
||||
string defensiveCopy = message.ToString();
|
||||
// Run in the background so that we don't block the main thread while performing IO.
|
||||
Task.Run(() => {
|
||||
Task.Run(() =>
|
||||
{
|
||||
StreamWriter sw = File.AppendText(@".\input-numbers.dat");
|
||||
sw.WriteLine(defensiveCopy);
|
||||
sw.Flush();
|
||||
|
@ -28,7 +29,12 @@ public class Example
|
|||
var span = memory.Span;
|
||||
while (true)
|
||||
{
|
||||
int value = Int32.Parse(Console.ReadLine());
|
||||
string? s = Console.ReadLine();
|
||||
|
||||
if (s is null)
|
||||
return;
|
||||
|
||||
int value = Int32.Parse(s);
|
||||
if (value < 0)
|
||||
return;
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net7.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<RootNamespace>void_returning</RootNamespace>
|
||||
</PropertyGroup>
|
||||
|
||||
|
|
|
@ -27,7 +27,12 @@ public class Example
|
|||
var span = memory.Span;
|
||||
while (true)
|
||||
{
|
||||
int value = Int32.Parse(Console.ReadLine());
|
||||
string? s = Console.ReadLine();
|
||||
|
||||
if (s is null)
|
||||
return;
|
||||
|
||||
int value = Int32.Parse(s);
|
||||
if (value < 0)
|
||||
return;
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<RootNamespace>void_returning</RootNamespace>
|
||||
</PropertyGroup>
|
||||
|
||||
|
|
|
@ -28,7 +28,12 @@ public class Example
|
|||
var span = memory.Span;
|
||||
while (true)
|
||||
{
|
||||
int value = Int32.Parse(Console.ReadLine());
|
||||
string? s = Console.ReadLine();
|
||||
|
||||
if (s is null)
|
||||
return;
|
||||
|
||||
int value = Int32.Parse(s);
|
||||
if (value < 0)
|
||||
return;
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<RootNamespace>void_returning</RootNamespace>
|
||||
</PropertyGroup>
|
||||
|
||||
|
|
|
@ -16,7 +16,12 @@ public class Example
|
|||
var span = memory.Span;
|
||||
while (true)
|
||||
{
|
||||
int value = Int32.Parse(Console.ReadLine());
|
||||
string? s = Console.ReadLine();
|
||||
|
||||
if (s is null)
|
||||
return;
|
||||
|
||||
int value = Int32.Parse(s);
|
||||
if (value < 0)
|
||||
return;
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<RootNamespace>void_returning</RootNamespace>
|
||||
</PropertyGroup>
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
@ -38,7 +38,7 @@ namespace BackupSample
|
|||
FROM data
|
||||
LIMIT 1
|
||||
";
|
||||
var value = (string)selectCommand.ExecuteScalar();
|
||||
var value = (string?)selectCommand.ExecuteScalar();
|
||||
Console.WriteLine(value);
|
||||
|
||||
// Clean up
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
@ -35,7 +35,8 @@ namespace CollationSample
|
|||
FROM greek_letter
|
||||
WHERE value = 'λ' COLLATE NOCASE
|
||||
";
|
||||
var count = (long)queryCommand.ExecuteScalar();
|
||||
var oCount = queryCommand.ExecuteScalar();
|
||||
var count = (oCount is not null) ? (int)oCount : -1;
|
||||
#endregion
|
||||
|
||||
Console.WriteLine($"Results: {count}");
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
@ -36,7 +36,7 @@ namespace DapperSample
|
|||
{
|
||||
public bool Boolean { get; set; }
|
||||
public byte Byte { get; set; }
|
||||
public byte[] ByteArray { get; set; }
|
||||
public byte[]? ByteArray { get; set; }
|
||||
public char Char { get; set; }
|
||||
public DateTime DateTime { get; set; }
|
||||
public DateTimeOffset DateTimeOffset { get; set; }
|
||||
|
@ -48,7 +48,7 @@ namespace DapperSample
|
|||
public long Int64 { get; set; }
|
||||
public sbyte SByte { get; set; }
|
||||
public short Int16 { get; set; }
|
||||
public string String { get; set; }
|
||||
public string? String { get; set; }
|
||||
public TimeSpan TimeSpan { get; set; }
|
||||
public uint UInt32 { get; set; }
|
||||
public ulong UInt64 { get; set; }
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
@ -81,7 +81,8 @@ namespace DateAndTimeSample
|
|||
// Convert TimeSpan to days instead of text
|
||||
command.Parameters.AddWithValue("$expected", expected).SqliteType = SqliteType.Real;
|
||||
#endregion
|
||||
var count = (long)command.ExecuteScalar();
|
||||
var oCount = command.ExecuteScalar();
|
||||
var count = (oCount is not null) ? (long)oCount : -1;
|
||||
Console.WriteLine($"{count} tasks are overdue.");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<RootNamespace>work_with_calendars</RootNamespace>
|
||||
</PropertyGroup>
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<RootNamespace>gannen_fmt</RootNamespace>
|
||||
</PropertyGroup>
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<RootNamespace>work_with_calendars</RootNamespace>
|
||||
</PropertyGroup>
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
||||
|
|
|
@ -6,7 +6,7 @@ class Program
|
|||
{
|
||||
static void Main()
|
||||
{
|
||||
var sw = OpenStream(@".\textfile.txt");
|
||||
var sw = OpenStream(@".\textfile.txt");
|
||||
if (sw is null)
|
||||
return;
|
||||
sw.WriteLine("This is the first line.");
|
||||
|
@ -14,39 +14,49 @@ class Program
|
|||
sw.Close();
|
||||
}
|
||||
|
||||
static StreamWriter OpenStream(string path)
|
||||
{
|
||||
if (path is null) {
|
||||
static StreamWriter? OpenStream(string path)
|
||||
{
|
||||
if (path is null)
|
||||
{
|
||||
Console.WriteLine("You did not supply a file path.");
|
||||
return null;
|
||||
}
|
||||
|
||||
try {
|
||||
try
|
||||
{
|
||||
var fs = new FileStream(path, FileMode.CreateNew);
|
||||
return new StreamWriter(fs);
|
||||
}
|
||||
catch (FileNotFoundException) {
|
||||
catch (FileNotFoundException)
|
||||
{
|
||||
Console.WriteLine("The file or directory cannot be found.");
|
||||
}
|
||||
catch (DirectoryNotFoundException) {
|
||||
catch (DirectoryNotFoundException)
|
||||
{
|
||||
Console.WriteLine("The file or directory cannot be found.");
|
||||
}
|
||||
catch (DriveNotFoundException) {
|
||||
catch (DriveNotFoundException)
|
||||
{
|
||||
Console.WriteLine("The drive specified in 'path' is invalid.");
|
||||
}
|
||||
catch (PathTooLongException) {
|
||||
catch (PathTooLongException)
|
||||
{
|
||||
Console.WriteLine("'path' exceeds the maximum supported path length.");
|
||||
}
|
||||
catch (UnauthorizedAccessException) {
|
||||
catch (UnauthorizedAccessException)
|
||||
{
|
||||
Console.WriteLine("You do not have permission to create this file.");
|
||||
}
|
||||
catch (IOException e) when ((e.HResult & 0x0000FFFF) == 32 ) {
|
||||
catch (IOException e) when ((e.HResult & 0x0000FFFF) == 32)
|
||||
{
|
||||
Console.WriteLine("There is a sharing violation.");
|
||||
}
|
||||
catch (IOException e) when ((e.HResult & 0x0000FFFF) == 80) {
|
||||
catch (IOException e) when ((e.HResult & 0x0000FFFF) == 80)
|
||||
{
|
||||
Console.WriteLine("The file already exists.");
|
||||
}
|
||||
catch (IOException e) {
|
||||
catch (IOException e)
|
||||
{
|
||||
Console.WriteLine($"An exception occurred:\nError code: " +
|
||||
$"{e.HResult & 0x0000FFFF}\nMessage: {e.Message}");
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
||||
|
|
Загрузка…
Ссылка в новой задаче