C# 无法将类型 system.DateTime转换成 string[]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 无法将类型 system.DateTime转换成 string[]相关的知识,希望对你有一定的参考价值。

namespace 类的应用_时间

public partial class Form1 : Form

public Form1()

InitializeComponent();

private void button1_Click(object sender, EventArgs e)


Time t = new Time();
t.TimeNow();
MessageBox.Show("现在的时间是");
textBox1.Text = t.TimeNow(); //到这里提示错误



class Time //定义一个时间的类 Time

public DateTime TimeNow() //定义一个当前时间TimeNow的方法

return DateTime.Now;



TextBox.Text 是string类型的,你调用t.TimeNow()返回的是一个DateTime类型的值。所以不能赋值给textBox1的Text属性。 可以调用DateTime的ToString()方法转换成string类型。 textBox1.Text = t.TimeNow().ToString(); 参考技术A textBox1.Text = t.TimeNow(); //到这里提示错误
这句要改成
textBox1.Text = t.TimeNow().ToString(); //这样有年月日和时间
textBox1.Text = t.TimeNow().ToString("d");//这样只有年月日,没有时间
参考技术B Time t = new Time();
//t.TimeNow();这句无用

MessageBox.Show("现在的时间是");
textBox1.Text = t.TimeNow().ToString(); //到这里提示错误追问

已经OK了,谢谢,但还想问一下:如果我把:MessageBox.Show("现在的时间是");这一句改成:
MessageBox.Show("现在的时间是:" & t.TimeNow().ToString() );提示错误,请问如何才能在提示框中显示当前的时间。

追答

把&改成+

本回答被提问者和网友采纳
参考技术C t.TimeNow().ToString(); 参考技术D textBox1.Text = t.TimeNow().ToString();

xamarin android如何将Java.Lang.Object类型转成C#类型

问题起源

其实这个标题也可以换一个更准确一点,因为我遇到的问题是:
xamarin android中的Class继承了Java.Lang.Object ,将json序列化成c#类型时发现无法赋值,序列化的格式没问题,但是Class的属性值没有复制成功。
xamarin android做一个列表展示,使用的是RecyclerView,采用的是的一个第三库
https://github.com/code-jar/MaterialDesignDemo
绑定到xamarin android中,最基本的使用方法如下:

    public class FlowItemAdapter : BaseQuickAdapter, View.IOnClickListener
    {
        private Context context;
        public FlowItemAdapter(Context context, List<TestItemModel> data) : base(Resource.Layout.item_flowIndex, data)
        {
            this.context = context;
        }
        protected override void Convert(BaseViewHolder holder, Java.Lang.Object item)
        {
            var currentModel= item as Java.Lang.Object;
        }

我们会发现这个Convert方法第二个参数是一个Java.Lang.Object类型,所以列表项的实体类必须继承Java.Lang.Object

    public class TestItemModel:Java.Lang.Object
    {
        public  string Id { get; set; }
    }

在序列化json的时候就会出现无法赋值:
var data= JsonConvert.DeserializeObject<List< TestItemModel >>(jsonTest);
data的结构是集合,但是没有赋值成功。这一点让我怀疑应该这个TestItemModel继承了Java.Lang.Object 导致,后来思考了一下,能不能不继承java.lang.object呢

解决思路

TestItemModel是可以不继承java.lang.object,当然解决这个问题目前来说,只能放弃继承了,不然无法序列化赋值,非常麻烦。
不继承的话
FlowItemAdapter中重写抽象方法 convert,的第二个参数如何转化呢?正如标题所示,如何将java.lang.Object类型转成c#类型呢?
这个库的源码https://github.com/CymChad/BaseRecyclerViewAdapterHelper/blob/master/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.java
抽象方法Convert的第二个参数是个泛型,绑定到xamarin android中就编程了Java.Lang.Object
所以我们就需要这个java中的类型转成c#类型:代码如下就一个扩展方法:

    public static class ObjectTypeHelper
    {
        public static T Cast<T>(this Java.Lang.Object obj) where T : class
        {
            var propertyInfo = obj.GetType().GetProperty("Instance");
            return propertyInfo == null ? null : propertyInfo.GetValue(obj, null) as T;
        }
    }

实践结果

  protected override void Convert(BaseViewHolder holder, Java.Lang.Object itemModel)
        {
            var currentModel = item.Cast<TestItemModel>();
        }

之前用这个库是继承java.lang.object,当请求接口序列化json的时候才发现这个问题。
参考链接
https://stackoverflow.com/questions/6594250/type-cast-from-java-lang-object-to-native-clr-type-in-monodroid














以上是关于C# 无法将类型 system.DateTime转换成 string[]的主要内容,如果未能解决你的问题,请参考以下文章

提示:无法将类型为“System.DateTime”的对象强制转换为类型“System.String”。

无法将类型为“System.DateTime”的对象强制转换为类型“System.String”

无法隐式转换类型“System.DateTime?”到“系统。日期时间”。存在显式转换

无法将类型“System.DateTime”隐式转换为“string”

asp.net 无法将类型“System.DateTime”隐式转换为“string”

无法将类型“System.DateTime”隐式转换为“string”是啥意思?怎么改正?