我正在构建一个代码重构工具,其中使用Roslyn API的标记/节点获得两种变量类型。
我需要比较并验证两种类型是否相同。
其他一些问题,例如How to get URI from File?,这些问题在您有对象的情况下仍然有效,但是在这种情况下,我需要使用字符串并比较类型。这里我的方法与val bitmap = MediaStore.Images.Media.getBitmap(context!!.contentResolver, mSelectedUri)
bitmap.compress(Bitmap.CompressFormat.PNG, 90, bytes) //compress to any quality 70-90 is preferred
//new Image File
val imageFile = File(docDir, imageFilename)
//writing new compressed bitmap to file
FileOutputStream(imageFile).use { fo ->
imageFile.createNewFile()
fo.write(bytes.toByteArray())
}
一起使用,但是当imageSizeInMB = imageFile.length().toDouble() / (1024 * 1024)
时我得到typeName = "int"
typeName="List<int>"
答案 0 :(得分:0)
您可以通过以下代码获取并检查所有可能的程序集类型。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
namespace Rextester
{
public class Program
{
public static void Main(string[] args)
{
foreach (var a in AppDomain.CurrentDomain.GetAssemblies())
{
foreach (var b in a.GetTypes())
{
Console.WriteLine(b.FullName);
}
}
}
}
}
打印列表中有
System.Collections.Generic.List`1
用于
List<T>
类型。 如果您希望自己的确切需求是
List<int>
你必须写
System.Collections.Generic.List`1[System.Int32]
因此您的代码将像这样工作:
public static Type GetType(string typeName)
{
string clrType = null;
if (CLRConstants.TryGetValue(typeName, out clrType))
{
return Type.GetType(clrType);
}
var type = Type.GetType(typeName);
if (type != null) return type;
foreach (var a in AppDomain.CurrentDomain.GetAssemblies())
{
type = a.GetType(typeName);
if (type != null)
return type;
}
return null;
}
private static Dictionary<string, string> CLRConstants {
get{
var dct = new Dictionary<string, string>();
dct.Add("int", "System.Int32");
dct.Add("List<int>", "System.Collections.Generic.List`1[System.Int32]");
return dct;
}
}