Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 平面图判别并集_C# - Fatal编程技术网

C# 平面图判别并集

C# 平面图判别并集,c#,C#,我正在使用Github上的一个lib,名为 基本上,您有一种类型可以是多种类型中的一种,但以静态安全的方式 下面是我努力实现的一个例子。 我有类型A,类型B,我想将类型B“flapmap”到类型A中。因为类型A可以接受来自B的任何单个T,这应该是可能的 编译器强制我在将T分配给A之前从B中提取每个T,正如下面愚蠢的x=>xlambdas所示 我也不想以类似A的东西结束。 那么,有人能想出一个基本上是针对这些类型的SelectMany吗 using OneOf; using System; usi

我正在使用Github上的一个lib,名为

基本上,您有一种类型可以是多种类型中的一种,但以静态安全的方式

下面是我努力实现的一个例子。
我有类型
A
,类型
B
,我想将类型B“flapmap”到类型A中。因为类型A可以接受来自B的任何单个T,这应该是可能的

编译器强制我在将T分配给A之前从B中提取每个T,正如下面愚蠢的
x=>x
lambdas所示

我也不想以类似
A
的东西结束。
那么,有人能想出一个基本上是针对这些类型的SelectMany吗

using OneOf;
using System;
using System.IO;

namespace ScratchPad
{
    class Program
    {
        struct BadRequest { }
        struct Error { }
        struct NotFound { }

        static void Main(string[] arg)
        {
            string result = GetFile(@"c:\data\foo.txt").Match(
                text => text,
                badRequest => "filepath cannot be null",
                notFound => "filepath does not exist",
                error => "an error occurred"
            );

            Console.WriteLine(result);
        }

        static OneOf<string, BadRequest, NotFound, Error> GetFile(string filepath)
        {
            OneOf<string, BadRequest, NotFound, Error> response = new BadRequest();

            if (filepath != null)
            {
                // How can I make the type from ReadText() automatically convert to the type of the response local variable, without having to write these silly lambda?
                response = ReadText(filepath).Match<OneOf<string, BadRequest, NotFound, Error>>(x => x, x => x, x => x); 
            }

            return response;
        }

        static OneOf<string, NotFound, Error> ReadText(string filepath)
        {
            OneOf<string, NotFound, Error> response = new NotFound();

            try
            {
                if (File.Exists(filepath))
                {
                    response = File.ReadAllText(filepath);
                }
            }
            catch
            {
                response = new Error();
            }

            return response;
        }
    }
}
使用其中一个;
使用制度;
使用System.IO;
名称空间草稿行
{
班级计划
{
结构BadRequest{}
结构错误{}
未找到结构{}
静态void Main(字符串[]arg)
{
string result=GetFile(@“c:\data\foo.txt”).Match(
text=>text,
badRequest=>“文件路径不能为空”,
notFound=>“文件路径不存在”,
error=>“发生了一个错误”
);
控制台写入线(结果);
}
GetFile的静态文件(字符串文件路径)
{
响应之一=新的坏请求();
if(filepath!=null)
{
//如何使ReadText()中的类型自动转换为响应局部变量的类型,而不必编写这些愚蠢的lambda?
response=ReadText(filepath).Match(x=>x,x=>x,x=>x);
}
返回响应;
}
ReadText(字符串文件路径)的静态值
{
响应之一=新的未找到();
尝试
{
if(File.Exists(filepath))
{
response=File.ReadAllText(文件路径);
}
}
抓住
{
响应=新错误();
}
返回响应;
}
}
}

扩展方法可能是一种方法

举个例子,我脑子里刚想出来,将3种类型转换为4种类型:

public static class OneOfExtensions
{
  public static OneOf<T1, T2, T3, T4> ConvertOneOf<T1, T2, T3, T4>(this OneOf<T1, T2, T3> oneOf)
  {
    return oneOf.Match<OneOf<T1, T2, T3, T4>>(x => x, x => x, x=> x);
  }

  public static OneOf<T1, T2, T3, T4> ConvertOneOf<T1, T2, T3, T4>(this OneOf<T1, T2, T4> oneOf)
  {
    return oneOf.Match<OneOf<T1, T2, T3, T4>>(x => x, x => x, x=> x);
  }

  public static OneOf<T1, T2, T3, T4> ConvertOneOf<T1, T2, T3, T4>(this OneOf<T1, T3, T4> oneOf)
  {
    return oneOf.Match<OneOf<T1, T2, T3, T4>>(x => x, x => x, x=> x);
  }

  public static OneOf<T1, T2, T3, T4> ConvertOneOf<T1, T2, T3, T4>(this OneOf<T2, T3, T4> oneOf)
  {
    return oneOf.Match<OneOf<T1, T2, T3, T4>>(x => x, x => x, x=> x);
  }
}
publicstaticclass-OneOfExtensions
{
ConvertOneOf的公共静态OneOf(此OneOf)
{
返回其中一个.Match(x=>x,x=>x,x=>x);
}
ConvertOneOf的公共静态OneOf(此OneOf)
{
返回其中一个.Match(x=>x,x=>x,x=>x);
}
ConvertOneOf的公共静态OneOf(此OneOf)
{
返回其中一个.Match(x=>x,x=>x,x=>x);
}
ConvertOneOf的公共静态OneOf(此OneOf)
{
返回其中一个.Match(x=>x,x=>x,x=>x);
}
}
它不是特别漂亮,但它应该保持代码相对干净